Получение температуры процессора с помощью Python?

Как получить температуру моего процессора с помощью Python? (Предполагая, что я нахожусь в Linux)

Ответ 1

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

Ответ 2

Существует более новый "sysfs therm zone" API (см. также Статья LWN и файл ядра Linux), показывающий температуры, например,

/sys/class/thermal/thermal_zone0/temp

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

Ответ 3

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

Ответ 4

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

Ответ 5

Посмотрите pyspectator в pip

ВНИМАНИЕ: Требуется python >= 3.0

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

while True:
    print cpu.temperature
    sleep(1)

Ответ 6

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

Ответ 7

Недавно я реализовал это в 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)]}

Ответ 8

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

Ответ 9

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

Ответ 10

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

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