Comment récupérer la température de mon processeur en utilisant Python? (En supposant que je suis sur Linux)
Py-cputemp semble faire le travail.
Il y a une API plus récente "sysfs thermal zone" (voir aussi LWN article et noyau Linux doc ) indiquant les températures inférieures à ex.
/sys/class/thermal/thermal_zone0/temp
Les lectures sont exprimées en millièmes de degré Celsius (bien que dans les noyaux plus anciens, cela puisse n’être que de degrés Celsius).
Si votre Linux supporte ACPI, la lecture du pseudo-fichier /proc/acpi/thermal_zone/THM0/temperature
(le chemin peut être différent, je sais que c'est /proc/acpi/thermal_zone/THRM/temperature
sur certains systèmes) devrait le faire. Mais je ne pense pas qu'il y ait une manière qui fonctionne dans tous les systèmes Linux dans le monde, vous devrez donc être plus précis sur ce que vous avez sous Linux! -)
La lecture de fichiers dans/sys/class/hwmon/hwmon */temp1_ * a fonctionné pour moi, mais autant que je sache, il n'existe aucune norme permettant de le faire proprement. des processeurs affichés par l'utilitaire " sensors " cmdline, auquel cas vous pouvez supposer qu'il est fiable.
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
J'ai récemment implémenté cela dans psutil pour Linux uniquement.
>>> 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)]}
Soigner pyspectator
dans pip
Requiert python3
from pyspectator import Cpu
from time import sleep
cpu = Cpu(monitoring_latency=1)
while True:
print (cpu.temperature)
sleep(1)
En fonction de votre distribution Linux, vous pouvez trouver un fichier sous /proc
contenant cette information. Par exemple, cette page suggère /proc/acpi/thermal_zone/THM/temperature
.
Sinon, vous pouvez installer le paquetage lm-sensors, puis installer PySensors (une liaison python pour libsensors).
Vous pouvez essayer le module PyI2C , il peut lire directement à partir du noyau.
Sysmon fonctionne bien. Bien fait, il fait bien plus que mesurer la température du processeur. Il s’agit d’un programme en ligne de commande qui enregistre toutes les données mesurées dans un fichier. En outre, il est open-source et écrit en python 2.7.