Доступ к температуре процессора в python

Мне нужен пример кода для доступа к температуре процессора в python.

Я запускаю Windows 7, BTW.

Ответы

Ответ 2

Вы можете использовать pywin32 для доступа к собственному API Windows. Я считаю, что должно быть возможно запросить Windows API для температуры процессора, если производитель вашего драйвера материнской платы зарегистрирует поставщика данных WMI через свой драйвер. Предполагая, что это так, вы можете загрузить расширения pywin32 и Python WMI, упомянутых в ответе ars, и затем выполните следующие действия:

import wmi
w = wmi.WMI()
print w.Win32_TemperatureProbe()[0].CurrentReading

Глядя на IronPython script в ответ ars, кажется, есть и другой способ сделать это, используя другой объект WMI. Используя тот же API и подход, вы можете попробовать получить значение температуры с помощью

w = wmi.WMI(namespace="root\wmi")
temperature_info = w.MSAcpi_ThermalZoneTemperature()[0]
print temperature_info.CurrentTemperature

который, по-видимому, должен вернуть значение температуры в десятых долях Кельвина, чтобы получить степень по Цельсию, я думаю, вы просто разделите это значение на 10 и вычтите ~ 273.

Ответ 3

Ознакомьтесь с библиотекой cputemp.

EDIT: в Windows вы можете конвертировать этот IronPython script, который использует WMI с помощью python Библиотека WMI.

Ответ 4

Код, предлагаемый eadmaster, может работать для более старых процессоров, для которых запрограммирован OpenHardwareMonitor, но у меня есть процессор Skylake i7 6700K. OpenHardwareMonitor не дал мне никаких результатов. Тем не менее, есть вилка этой программы под названием CPU Thermometer, которая основана на OpenHardwareMonitor, которая распознает мой процессор.

В погоне за тем, как получить CPU temps через Python, я переключился на IronPython, чтобы получить доступ к инфраструктуре .Net и иметь легкий доступ к другим данным о производительности, но должно быть довольно легко выяснить, это для vanilla Python 2.7 (просто запустите процессорный термометр вместо OpenHardwareMonitor и измените ваше пространство имен на "root\CPUThermometer"? Это может быть так просто?).

#
# CPU Temp --REQUIRES CPU TEMPERATURE TO BE RUNNING!--
#
import clr
clr.AddReference('System.Management')
from System.Management import (ManagementScope, ManagementObject, ManagementObjectSearcher, WqlObjectQuery)

scope = ManagementScope("root\CPUThermometer")

searcher = ManagementObjectSearcher(scope, 
    WqlObjectQuery("SELECT * FROM Sensor Where SensorType LIKE 'Temperature'"), None)

mo = ManagementObject()

print "\n"
print "              Temp      Min       Max"

strout = str(' ')

for mo in searcher.Get():
    strout = '{0}   {1} C    {2} C    {3} C\n{4}'.format(mo["Name"], mo["Value"], mo["Min"], mo["Max"], strout)

print strout

Пример вывода:

D:\IronPython 2.7>ipy64 c:\users\neamerjell\desktop\test.py


              Temp      Min       Max
CPU Core #1   21.0 C    20.0 C    37.0 C
CPU Core #2   23.0 C    21.0 C    39.0 C
CPU Core #3   21.0 C    20.0 C    32.0 C
CPU Core #4   21.0 C    20.0 C    36.0 C

Я нашел трудный способ, что запрос не является стандартным SQL и НЕ НРАВИТСЯ в предложение "Заказать по", поэтому мне нужно было сделать какое-то причудливое форматирование строк, чтобы получить правильный порядок, поскольку запрос возвращает ядра в обратном порядке заказ. Это немного озадачило меня, пока я не разработал этот способ вокруг него.