使用 Python Windows 获取 CPU 和 GPU 温度

Posted

技术标签:

【中文标题】使用 Python Windows 获取 CPU 和 GPU 温度【英文标题】:Get CPU and GPU Temp using Python Windows 【发布时间】:2020-10-18 09:58:52 【问题描述】:

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

如果有一种方法可以找到 Mac OS 的温度,我也会很感激,但我主要想要一种适用于 Windows 的方法。

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

当我尝试执行以下操作时,我得到无:

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)

错误:

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

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

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

更新:我发现了这个:https://***.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'>)]

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

【问题讨论】:

可能有帮助; ***.com/q/3262603/6524169 我想你应该阅读更多关于ACPI 我总是对这类问题感到困惑。为什么你不能简单地使用你的平台提供的任何工具?为什么你觉得有必要重新发明***?我喜欢 Python,并且在任何地方都使用它来最大化性能不是问题。获取 CPU 或 GPU 的温度不应是性能关键操作。这意味着运行外部命令来提取该信息应该是可以接受的。 我已经尝试寻找命令。你找到了吗?我发现的所有方法都不起作用。 继续阅读psutil.sensors_temperatures(fahrenheit=False) 【参考方案1】:

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

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

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

安装模块pythonnet:

pip install pythonnet

以下代码在我的 PC 上运行良好(获取 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 上运行它,您可能不需要以管理员身份运行它。) 以管理员身份运行保存了我的代码!我从这里得到:***.com/questions/3262603/…,现在所有传感器都工作了!【参考方案2】:

我发现了一个很好的模块来获取 NVIDIA GPU 的温度。

pip 安装 gputil

打印温度的代码

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

我找到了here

【讨论】:

【参考方案3】:

所以你可以使用gpiozero 来获取温度 第一个 pip install gpiozerofrom gpiozero import CPUTemperature 导入它和 cpu = CPUTemperature() print(cpu.temperature)

代码:

from gpiozero import CPUTemperature

cpu = CPUTemperature()
print(cpu.temperature)

希望你喜欢。 :)

【讨论】:

我使用的是 Windows,而不是 RPi,我收到了这个错误:gpiozero.exc.BadPinFactory: Unable to load any default pin factory!

以上是关于使用 Python Windows 获取 CPU 和 GPU 温度的主要内容,如果未能解决你的问题,请参考以下文章

python使用psutil获取系统(Windows Linux)所有运行进程信息实战:CPU时间内存使用量内存占用率PID名称创建时间等;

如何在 Python 中获取当前的 CPU 和 RAM 使用情况?

Python获取Linux或Windows系统的基本信息

python 获取cpu内存硬盘等实时信息 psutil

python获取系统信息模块psutil

PHP如何在windows下获取计算机的cpu和内存