Как узнать температуру ЦП в Python 3.8?
Библиотеки pyspectator и psutil не работают. psutil работает лишь на linux, а pyspectator просто отказывается работать. Есть еще какие-нибудь библиотеки?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Решение нашел в использовании:
- модуля pythonnet (
pip install pythonnet), он позволяет работать с .NET - библиотеки OpenHardwareMonitorLib.dll
Для получения полной информации нужно запускать скрипт с правами администратора.
import os
# pip install pythonnet
import clr
openhardwaremonitor_hwtypes = [
'Mainboard', 'SuperIO', 'CPU', 'RAM', 'GpuNvidia', 'GpuAti', 'TBalancer', 'Heatmaster', 'HDD'
]
openhardwaremonitor_sensortypes = [
'Voltage', 'Clock', 'Temperature', 'Load', 'Fan', 'Flow', 'Control', 'Level',
'Factor', 'Power', 'Data', 'SmallData'
]
def initialize_openhardwaremonitor():
DIR = os.path.abspath(os.path.dirname(__file__))
dll_file_name = DIR + R'\OpenHardwareMonitorLib.dll'
clr.AddReference(dll_file_name)
from OpenHardwareMonitor import Hardware
handle = Hardware.Computer()
handle.MainboardEnabled = True
handle.CPUEnabled = True
handle.RAMEnabled = True
handle.GPUEnabled = True
handle.HDDEnabled = True
handle.Open()
return handle
def fetch_stats(handle):
for i in handle.Hardware:
i.Update()
for sensor in i.Sensors:
parse_sensor(sensor)
for j in i.SubHardware:
j.Update()
for subsensor in j.Sensors:
parse_sensor(subsensor)
def parse_sensor(sensor):
if sensor.Value is None:
return
# If SensorType is Temperature
if sensor.SensorType == openhardwaremonitor_sensortypes.index('Temperature'):
type_name = openhardwaremonitor_hwtypes[sensor.Hardware.HardwareType]
print(f" {type_name}. {sensor.Hardware.Name!r} "
f"Temperature Sensor #{sensor.Index} {sensor.Name} - {sensor.Value}°C")
if __name__ == "__main__":
print("OpenHardwareMonitor:")
HardwareHandle = initialize_openhardwaremonitor()
fetch_stats(HardwareHandle)
Для дополнительной информации по работе с API OpenHardwareMonitorLib.dll обращайтесь к https://github.com/openhardwaremonitor/openhardwaremonitor/
PS.
Пока разбирался, нашел некоторые "подводные камни":
- Код вида
clr.AddReference('OpenHardwareMonitorLib.dll')не работает: нужно или убирать.dllиз строки, или указывать абсолютный путь кdll - Не получится импортировать CPUThermometerLib.dll, т.к. пространство имен
CPUThermometerиз библиотеки не существует, даже больше -- у библиотек OpenHardwareMonitorLib.dll и CPUThermometerLib.dll с какой-то версии пространства одинаковые, что намекает на объединение кода или форк (пруф см. в скриншоте ниже). Поэтому из того ответа убрал использование CPUThermometerLib.dll, оставив OpenHardwareMonitorLib.dll - Библиотеку OpenHardwareMonitorLib.dll можно будет скачать с офф. сайта (скачать и вытащить из архива с программой) или сразу из папки примера
CPUThermometerLib.dll и OpenHardwareMonitorLib.dll одно и тоже:
