web-dev-qa-db-fra.com

Obtenir la température du processeur en utilisant Python?

Comment récupérer la température de mon processeur en utilisant Python? (En supposant que je suis sur Linux)

26
jamieb

Py-cputemp semble faire le travail.

8
DrDee

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).

14
Craig McQueen

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! -)

8
Alex Martelli

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
6
Giampaolo Rodolà

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)]}
4
Giampaolo Rodolà

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)
3
Pedro

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.

2
Greg Hewgill

Sinon, vous pouvez installer le paquetage lm-sensors, puis installer PySensors (une liaison python pour libsensors).

1
yassi

Vous pouvez essayer le module PyI2C , il peut lire directement à partir du noyau.

0
Wolph

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. 

Sysmon: https://github.com/calthecoder/sysmon-1.0.1

0
calthecoder