问题
How do I retrieve the temperature of my CPU using Python? (Assuming I'm on Linux)
回答1:
Py-cputemp seems to do the job.
回答2:
There is a newer "sysfs thermal zone" API (see also LWN article and Linux kernel doc) showing temperatures under e.g.
/sys/class/thermal/thermal_zone0/temp
Readings are in thousandths of degrees Celcius (although in older kernels, it may have just been degrees C).
回答3:
If your Linux supports ACPI, reading pseudo-file /proc/acpi/thermal_zone/THM0/temperature
(the path may differ, I know it's /proc/acpi/thermal_zone/THRM/temperature
in some systems) should do it. But I don't think there's a way that works in every Linux system in the world, so you'll have to be more specific about exactly what Linux you have!-)
回答4:
I recently implemented this in psutil for Linux only.
>>> import psutil
>>> psutil.sensors_temperatures()
{'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],
'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],
'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),
shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0),
shwtemp(label='Core 1', current=52.0, high=100.0, critical=100.0),
shwtemp(label='Core 2', current=45.0, high=100.0, critical=100.0),
shwtemp(label='Core 3', current=47.0, high=100.0, critical=100.0)]}
回答5:
Reading files in /sys/class/hwmon/hwmon*/temp1_* worked for me but AFAIK there are no standards for doing this cleanly. Anyway, you can try this and make sure it provides the same number of CPUs shown by "sensors" cmdline utility, in which case you can assume it's reliable.
from __future__ import division
import os
from collections import namedtuple
_nt_cpu_temp = namedtuple('cputemp', 'name temp max critical')
def get_cpu_temp(fahrenheit=False):
"""Return temperatures expressed in Celsius for each physical CPU
installed on the system as a list of namedtuples as in:
>>> get_cpu_temp()
[cputemp(name='atk0110', temp=32.0, max=60.0, critical=95.0)]
"""
# http://www.mjmwired.net/kernel/Documentation/hwmon/sysfs-interface
cat = lambda file: open(file, 'r').read().strip()
base = '/sys/class/hwmon/'
ls = sorted(os.listdir(base))
assert ls, "%r is empty" % base
ret = []
for hwmon in ls:
hwmon = os.path.join(base, hwmon)
label = cat(os.path.join(hwmon, 'temp1_label'))
assert 'cpu temp' in label.lower(), label
name = cat(os.path.join(hwmon, 'name'))
temp = int(cat(os.path.join(hwmon, 'temp1_input'))) / 1000
max_ = int(cat(os.path.join(hwmon, 'temp1_max'))) / 1000
crit = int(cat(os.path.join(hwmon, 'temp1_crit'))) / 1000
digits = (temp, max_, crit)
if fahrenheit:
digits = [(x * 1.8) + 32 for x in digits]
ret.append(_nt_cpu_temp(name, *digits))
return ret
回答6:
Look after pyspectator
in pip
Requires python3
from pyspectator import Cpu
from time import sleep
cpu = Cpu(monitoring_latency=1)
while True:
print (cpu.temperature)
sleep(1)
回答7:
Depending on your Linux distro, you may find a file under /proc
that contains this information. For example, this page suggests /proc/acpi/thermal_zone/THM/temperature
.
回答8:
As an alternative you can install the lm-sensors package, then install PySensors (a python binding for libsensors).
回答9:
You could try the PyI2C module, it can read directly from the kernel.
回答10:
Sysmon works nice. Nicely made, it does much more than measure CPU temperature. It is a command line program, and logs all the data it measured to a file. Also, it is open-source and written in python 2.7.
Sysmon: https://github.com/calthecoder/sysmon-1.0.1
来源:https://stackoverflow.com/questions/2440511/getting-cpu-temperature-using-python