Доступ к температуре процессора в python
Мне нужен пример кода для доступа к температуре процессора в python.
Я запускаю Windows 7, BTW.
Ответы
Ответ 1
Используйте модуль WMI + Откройте Hardware Monitor + его интерфейс WMI описан здесь.
Пример кода:
import wmi
w = wmi.WMI(namespace="root\OpenHardwareMonitor")
temperature_infos = w.Sensor()
for sensor in temperature_infos:
if sensor.SensorType==u'Temperature':
print(sensor.Name)
print(sensor.Value)
Ответ 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 и НЕ НРАВИТСЯ в предложение "Заказать по", поэтому мне нужно было сделать какое-то причудливое форматирование строк, чтобы получить правильный порядок, поскольку запрос возвращает ядра в обратном порядке заказ. Это немного озадачило меня, пока я не разработал этот способ вокруг него.