使用Python Windows获取CPU和GPU温度

4 人关注

我想知道是否有办法在python中获得CPU和GPU的温度。我已经为Linux找到了一种方法(使用 psutil.sensors_temperature() ),而我想为Windows找到一种方法。

如果有办法找到Mac OS的温度,我也会很感激,但我主要是想有办法找到windows的温度。

我更喜欢只使用python模块,但DLL和C/C++扩展也是完全可以接受的。

When I try doing the below, I get None:

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

当我尝试做以下工作时,我得到一个错误。

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

Error:

wmi.x_wmi: <x_wmi: Unexpected COM Error (-2147217396, 'OLE error 0x8004100c', None, None)>

我听说过OpenHardwareMoniter,但这需要我安装一些不是python模块的东西。我也希望不必以管理员身份运行脚本来获得结果。

我也可以用python运行windows cmd命令,但我没有找到一个可以返回CPU温度的命令。

更新:我发现了这个。https://stackoverflow.com/a/58924992/13710015. 但我不知道如何使用它。 当我试着做。print(OUTPUT_temp._fields_),我得到的结果是

[('Board Temp', <class 'ctypes.c_ulong'>), ('CPU Temp', <class 'ctypes.c_ulong'>), ('Board Temp2', <class 'ctypes.c_ulong'>), ('temp4', <class 'ctypes.c_ulong'>), ('temp5', <class 'ctypes.c_ulong'>)]

注意:我真的不想以管理员身份运行这个程序。如果我必须这样做,我可以,但我宁愿不这样做。

5 个评论
我想你应该多读一些关于 ACPI
我总是对这种类型的问题感到疑惑。为什么你不能简单地使用你的平台所提供的任何工具?为什么你觉得有必要重新发明轮子呢?我喜欢Python,并在任何地方使用它,使性能最大化不是一个问题。测量CPU或GPU的温度不应该是一个性能关键的操作。这意味着运行一个外部命令来提取该信息应该是可以接受的。
我已经试着寻找这个命令。你找到了吗?我找到的所有命令都不起作用。
python
python-3.x
windows
windows-10
KetZoomer
KetZoomer
发布于 2020-06-28
3 个回答
jizhihaoSAMA
jizhihaoSAMA
发布于 2020-06-28
已采纳
0 人赞同

我认为没有一个直接的方法来实现这一点。一些CPU生产商不会提供 wmi 来让你直接知道温度。

你可以使用 OpenHardwareMoniter.dll 。使用动态库。

首先,下载 OpenHardwareMoniter .它包含一个名为 OpenHardwareMonitorLib.dll 的文件(版本0.9.6,2020年12月)。

安装模块 pythonnet

pip install pythonnet

以下代码在我的电脑上运行良好(获取CPU温度)。

import clr # the pythonnet module.
clr.AddReference(r'YourdllPath') 
# e.g. clr.AddReference(r'OpenHardwareMonitor/OpenHardwareMonitorLib'), without .dll
from OpenHardwareMonitor.Hardware import Computer
c = Computer()
c.CPUEnabled = True # get the Info about CPU
c.GPUEnabled = True # get the Info about GPU
c.Open()
while True:
    for a in range(0, len(c.Hardware[0].Sensors)):
        # print(c.Hardware[0].Sensors[a].Identifier)
        if "/temperature" in str(c.Hardware[0].Sensors[a].Identifier):
            print(c.Hardware[0].Sensors[a].get_Value())
            c.Hardware[0].Update()

要获得GPU温度,请将c.Hardware[0]改为c.Hardware[1]

将结果与:

注意。如果你想得到CPU的温度,你需要以管理员身份运行它。否则,你将只能得到Load的值。对于GPU温度,它可以在没有管理员权限的情况下工作(如在Windows 10 21H1)。

我做了一些改变,从一个Chinese Blog

你好,我很感谢你的回答。我对下载dll和所有东西都没问题,但我的主要问题是,它需要以管理员身份运行。我对下载更多的东西没有意见,但有没有办法在不需要以管理员身份运行的情况下做到这一点,或者这是不可能的?
我想这是最好的答案。只是问一下与AMD CPU的兼容性如何。
@KetZoomer 我没有用AMD CPU测试,但我认为 OpenHardwareMoniter.dll 可能包含了关于 AMD 的API。
@KetZoomer 我不知道如何在没有管理员的情况下运行它,在博客中,作者没有提到管理员,所以我想也许这取决于操作系统的版本。(如果你在Windows 7上运行它,你也许不需要以管理员身份运行它。)
以管理员身份运行保存了我的代码!我从这里得到。 stackoverflow.com/questions/3262603/... 而且现在所有的传感器都工作了!
GesChen
GesChen
发布于 2020-06-28
0 人赞同

我发现了一个相当好的模块,可以获得以下的温度 英伟达 GPUs.

pip安装gputil

打印温度的代码

import GPUtil
gpu = GPUtil.getGPUs()[0]
print(gpu.temperature)

I found it here

Jas0n
Jas0n
发布于 2020-06-28
0 人赞同

所以你可以用 gpiozero 来获取临时数据。 先用 pip install gpiozero from gpiozero import CPUTemperature 来导入,然后用 cpu = CPUTemperature() print(cpu.temperature) 来导入。

code:

from gpiozero import CPUTemperature