Ответ 1
Py-cputemp, похоже, выполняет эту работу.
Как получить температуру моего процессора с помощью Python? (Предполагая, что я нахожусь в Linux)
Py-cputemp, похоже, выполняет эту работу.
Существует более новый "sysfs therm zone" API (см. также Статья LWN и файл ядра Linux), показывающий температуры, например,
/sys/class/thermal/thermal_zone0/temp
Чтения находятся в тысячных долях градуса Цельсия (хотя в старых ядрах это могут быть только градусы C).
Если ваш Linux поддерживает ACPI, чтение псевдофайла /proc/acpi/thermal_zone/THM0/temperature
(путь может отличаться, я знаю его /proc/acpi/thermal_zone/THRM/temperature
в некоторых системах) должен это сделать. Но я не думаю, что есть способ, который работает в каждой системе Linux в мире, поэтому вам нужно быть более конкретным в отношении того, что у вас есть Linux! -)
Чтение файлов в /sys/class/hwmon/hwmon */temp1 _ * работало для меня, но AFAIK не существует стандартов для этого. В любом случае, вы можете попробовать это и убедиться, что оно обеспечивает одинаковое количество процессоров, показанных утилитой cmdline ", и в этом случае вы можете считать это надежным.
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
Посмотрите pyspectator
в pip
ВНИМАНИЕ: Требуется python >= 3.0
from pyspectator import Cpu
from time import sleep
cpu = Cpu(monitoring_latency=1)
while True:
print cpu.temperature
sleep(1)
В зависимости от вашего дистрибутива Linux вы можете найти файл под /proc
, который содержит эту информацию. Например, эта страница предлагает /proc/acpi/thermal_zone/THM/temperature
.
Недавно я реализовал это в psutil только для Linux.
>>> 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)]}
В качестве альтернативы вы можете установить пакет lm-sensors, а затем установить PySensors (привязка к python для libsensors).
Вы можете попробовать PyI2C модуль, который он может читать непосредственно из ядра.
Сисмон работает хорошо. Отличная конструкция, это намного больше, чем измерение температуры процессора. Это программа командной строки и регистрирует все данные, которые она измеряет в файле. Кроме того, он является открытым исходным кодом и написан на python 2.7.