2010-03-13 3 views

ответ

7

Py-cputemp, похоже, выполняет эту работу.

+0

ру-cputemp в основном тонкий шпон над/Proc/ACPI/thermal_zone. Это изначально не работало для меня, пока я не понял, что мне нужно включить ACPI в моем BIOS. Я отключил его, потому что понял, что я не хочу управлять питанием на сервере. Спасибо за ответ; Я согласен с этим, потому что он был опубликован первым и заставило меня задуматься о том, как я себя чувствую. – jamieb

+0

Это не ответ. – GLHF

+0

Эта библиотека не поддерживается и даже не зарегистрирована в PyPI ... – Cerin

2

В зависимости от вашего дистрибутива Linux вы можете найти файл под /proc, который содержит эту информацию. Например, this page предлагает /proc/acpi/thermal_zone/THM/temperature.

0

Вы можете попробовать модуль PyI2C, он может считываться непосредственно из ядра.

8

Если ваш Linux поддерживает ACPI, чтение псевдофайла /proc/acpi/thermal_zone/THM0/temperature (путь может отличаться, я знаю, что это /proc/acpi/thermal_zone/THRM/temperature в некоторых системах) должен это сделать. Но я не думаю, что есть способ, который работает в каждой системе Linux в мире, поэтому вам нужно быть более конкретным в отношении того, что у вас есть! -)

1

В качестве альтернативы вы можете установить lm-sensors, затем установите PySensors (привязка python для libsensors).

+0

К сожалению PySensors работает только под версией Python 2.x –

12

Существует newer API (см. Также LWN article и Linux kernel doc), где показаны температуры, например.

/sys/class/thermal/thermal_zone0/temp 

чтения в тысячных градусов по Цельсию (хотя в старых ядрах, это, возможно, только что был градусов C).

5

Чтение файлов в /sys/class/hwmon/hwmon */temp1_ * работал для меня, но AFAIK не существует стандартов для этого. В любом случае, вы можете попробовать это и убедиться, что оно обеспечивает одинаковое количество CPU, показанное «sensors» утилитой 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 
0

Sysmon работает хорошо. Отличная конструкция, это намного больше, чем измерение температуры процессора. Это программа командной строки и регистрирует все данные, которые она измеряет в файле. Кроме того, он является открытым исходным кодом и написан на python 2.7.

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

2

Я недавно внедренная это в 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)]} 
3

Заботьтесь pyspectator в pip

ВНИМАНИЕ: Требуется питон> = 3,0

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

while True: 
    print cpu.temperature 
    sleep(1) 
Смежные вопросы