¿Conseguir la temperatura de la CPU usando Python?

¿Cómo recupero la temperatura de mi CPU usando Python? (Suponiendo que estoy en Linux)

Py-cputemp parece hacer el trabajo.

Hay una nueva API de “zona térmica de sysfs” (vea también el artículo LWN y el documento del kernel de Linux ) que muestra temperaturas por debajo de

/sys/class/thermal/thermal_zone0/temp 

Las lecturas están en milésimas de grados Celsius (aunque en los núcleos más antiguos, pueden haber sido solo grados C).

Si su Linux admite ACPI, leer pseudoarchivo /proc/acpi/thermal_zone/THM0/temperature (la ruta puede diferir, sé que es /proc/acpi/thermal_zone/THRM/temperature en algunos sistemas) debería hacerlo. Pero no creo que exista una manera que funcione en todos los sistemas Linux del mundo, ¡así que tendrás que ser más específico sobre qué Linux tienes exactamente! -)

La lectura de archivos en / sys / class / hwmon / hwmon * / temp1_ * funcionó para mí, pero AFAIK no existen estándares para hacerlo de manera limpia. De todos modos, puedes probar esto y asegurarte de que proporciona la misma cantidad de CPU que muestra la utilidad cmdline de ” sensores “, en cuyo caso puedes asumir que es confiable.

 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 

Recientemente implementé esto en psutil solo para 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)]} 

Cuidar pyspectator en pip

Requiere python3

 from pyspectator import Cpu from time import sleep cpu = Cpu(monitoring_latency=1) while True: print (cpu.temperature) sleep(1) 

Dependiendo de su distribución de Linux, puede encontrar un archivo en /proc que contiene esta información. Por ejemplo, esta página sugiere /proc/acpi/thermal_zone/THM/temperature .

Como alternativa, puede instalar el paquete lm-sensores, y luego instalar PySensors (un enlace python para libsensors).

Puede probar el módulo PyI2C , puede leer directamente desde el kernel.

Sysmon funciona bien. Bien hecho, hace mucho más que medir la temperatura de la CPU. Es un progtwig de línea de comandos y registra todos los datos que mide en un archivo. Además, es de código abierto y está escrito en python 2.7.

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