2010-03-13 19 views

Respuesta

7

Py-cputemp parece hacer el trabajo.

+0

py-cputemp es básicamente una fina capa sobre/proc/acpi/thermal_zone. Esto originalmente no funcionó para mí hasta que me di cuenta de que necesitaba habilitar ACPI en mi BIOS. Lo había desactivado porque pensé que no quería administración de energía en un servidor. Gracias por la respuesta; Estoy aceptando este porque fue publicado primero y me llevó a pensar sobre el origen de mi problema. – jamieb

+0

Esto no es una respuesta. – GLHF

+0

Esta biblioteca no está en mantenimiento y ni siquiera está registrada en PyPI ... – Cerin

2

Dependiendo de su distribución de Linux, puede encontrar un archivo en /proc que contenga esta información. Por ejemplo, this page sugiere /proc/acpi/thermal_zone/THM/temperature.

0

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

8

Si su Linux es compatible con ACPI, debe leer el pseudo-archivo /proc/acpi/thermal_zone/THM0/temperature (la ruta puede variar, sé que es /proc/acpi/thermal_zone/THRM/temperature en algunos sistemas) debería hacerlo. Pero no creo que haya una forma de que funcione en cada sistema Linux en el mundo, por lo que tendrá que ser más específico sobre qué Linux tiene exactamente! -)

1

Como alternativa puede instalar el paquete lm-sensors, luego instale PySensors (un enlace de pitón para libsensors).

+0

Desafortunadamente PySensors solo se ejecuta en la versión de Python 2.x. –

12

Hay un newer API (vea también LWN article y) que muestra las temperaturas debajo de, p.

/sys/class/thermal/thermal_zone0/temp 

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

5

Lectura de archivos en /sys/class/hwmon/hwmon */temp1_ * funcionó para mí, pero AFAIK no hay estándares para hacer esto limpiamente. De todos modos, puede probar esto y asegurarse de que proporciona el mismo número de CPU que se muestra con la herramienta "sensors" cmdline, en cuyo caso puede 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 
0

Sysmon works nice. Bien hecho, hace mucho más que medir la temperatura de la CPU. Es un programa de línea de comando y registra todos los datos que midió 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

2

recientemente he implementado esto en psutil para Linux solamente.

>>> 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)]} 
3

Cuida pyspectator en pip

ADVERTENCIA: Requiere Python> = 3,0

from pyspectator import Cpu 
from time import sleep 
cpu = Cpu(monitoring_latency=1) 

while True: 
    print cpu.temperature 
    sleep(1) 
Cuestiones relacionadas