Python读取Windows和Linux的CPU、GPU、硬盘等部件温度的读取方法

 更新时间:2025年02月28日 09:15:03   作者:好好学习z  
本文详细介绍了如何使用Python在Windows和Linux系统上通过OpenHardwareMonitor和psutil库读取CPU、GPU等部件的温度,包括Windows下的两种方法以及Linux下的简单实现,感兴趣的小伙伴跟着小编一起来看看吧

这篇博客介绍了如何使用Python读取计算机的CPU、GPU、硬盘等部件的温度,读取后的信息可以根据需要进行日志记录、温度监控等。

根据不同的平台,本文分别介绍Windows下和Linux下的部件温度读取方法。

Windows下读取方法

这种方法仅适用于Windows10,Windows11运行会报错(我原本是在Windows10下写的代码,能正常读取温度,但是电脑更新到Windows11后运行直接就报错了),至于其他更低版本的Windows系统则没有测试过。

Windows下读取计算机部件的温度需要用到一款叫做 Open Hardware Monitor 的软件(下载地址),下载后得到的是一个压缩包,解压后的结果如下:

  • 这里我们主要用到两个文件(红色框标记),也是利用这个软件的两种方法。
  1. 使用 OpenHardwareMonitor.exe
  • 这种方法要求始终在后台保持 OpenHardwareMonitor.exe 处于运行状态。
  • 程序运行需要管理员权限。可以在启动IDE时便选择以管理员权限运行
    以下为代码:
import ctypes
import datetime
import sys
import time

import wmi
import psutil
import subprocess


def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except Exception:
        return False


def check_process(path, proc_name):
    for proc in psutil.process_iter():
        if proc.name() == proc_name:
            break
    else:
        subprocess.Popen(path + proc_name)
        time.sleep(5)


if is_admin():
    path = 'openhardwaremonitor-v0.9.6/OpenHardwareMonitor/'
    proc_name = "OpenHardwareMonitor.exe"
    check_process(path, proc_name)
    w = wmi.WMI(namespace='root/OpenHardwareMonitor')

    while True:
        print('{:=^50}'.format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
        temperature_info = w.Sensor()
        temperature_info = sorted(temperature_info, key=lambda x: str(x.Identifier))
        for sensor in temperature_info:
            if sensor.SensorType == 'Temperature':
                identifier = str(sensor.Identifier).split('/')
                print(
                    '{0:^20}的当前温度为:{1:>5}℃'.format('-'.join([identifier[1], identifier[2], identifier[-1]]),
                                                   sensor.Value))
        time.sleep(1)
else:
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)

输出示例:

  1. 使用 OpenHardwareMonitorLib.dll
  • 这种方法类似于将 OpenHardwareMonitorLib.dll 作为第三方库引入到python中。
  • 同样的,运行代码需要管理员权限,否则啥都读不出来。可以在启动IDE时便选择以管理员权限运行
    以下为代码:
import clr
import time
import datetime

clr.AddReference('D:/OpenHardwareMonitor/OpenHardwareMonitorLib.dll')  # 填写绝对路径

import OpenHardwareMonitor as ohm
from OpenHardwareMonitor.Hardware import Computer, HardwareType, SensorType

computer = Computer()

computer.CPUEnabled = True
computer.GPUEnabled = True
computer.HDDEnabled = True
computer.RAMEnabled = True
computer.MainboardEnabled = True
computer.FanControllerEnabled = True

hardwareType = ohm.Hardware.HardwareType
sensorType = ohm.Hardware.SensorType

computer.Open()

while True:
    print('{:=^50}'.format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
    for hardware in computer.Hardware:
        hardware.Update()
        for sensor in hardware.Sensors:
            if sensor.SensorType == sensorType.Temperature:
                si_ls = str(sensor.Identifier).split('/')
                ssname = f'{si_ls[1]}#{si_ls[-1]}'
                print(ssname, sensor.Value)
    time.sleep(1)

输出示例:

Linux下读取方法

  • Linux下读取部件温度的方法比较简单,直接使用 psutil 包即可。代码如下:
import psutil


def main():
    if not hasattr(psutil, "sensors_temperatures"):
        sys.exit("platform not supported")
    temps = psutil.sensors_temperatures()
    if not temps:
        sys.exit("can't read any temperature")
    for name, entries in temps.items():
        print(name)
        for entry in entries:
            print("    %-20s %s °C (high = %s °C, critical = %s °C)" % (
                entry.label or name, entry.current, entry.high,
                entry.critical))
        print()
main()

输出示例:

以上就是Python读取Windows和Linux的CPU、GPU、硬盘等部件温度的读取方法的详细内容,更多关于Python读取Windows和Linux部件温度的资料请关注脚本之家其它相关文章!

相关文章

  • 爬山算法简介和Python实现实例

    爬山算法简介和Python实现实例

    这篇文章主要介绍了爬山算法,爬山法(climbing method)是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)然后用Python实现了这个算法,需要的朋友可以参考下
    2014-04-04
  • python绘制规则网络图形实例

    python绘制规则网络图形实例

    今天小编大家分享一篇python绘制规则网络图形实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 浅析python中的分片与截断序列

    浅析python中的分片与截断序列

    这篇文章主要介绍python对序列的分片方法。通过分片规则可以很简单的处理一些复杂的for循环操作。很有借鉴价值,有需要的可以一起参考学习。
    2016-08-08
  • python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案

    python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题

    这篇文章主要介绍了python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题,本文给大家分享解决方案,感兴趣的朋友跟随小编一起看看吧
    2020-08-08
  • python统计文本字符串里单词出现频率的方法

    python统计文本字符串里单词出现频率的方法

    这篇文章主要介绍了python统计文本字符串里单词出现频率的方法,涉及Python字符串操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Python如何读写JSON格式数据

    Python如何读写JSON格式数据

    这篇文章主要介绍了Python如何读写JSON格式数据,JSON文件的读写应算成Python基础知识的内容,在编写Nonebot插件时,常常会操作JSON类型的数据,需要的朋友可以参考下
    2023-04-04
  • python自动化测试selenium执行js脚本实现示例

    python自动化测试selenium执行js脚本实现示例

    这篇文章主要为大家介绍了python自动化测试selenium执行js脚本的实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Linux下Python自动化脚本编写到运维工具开发详解

    Linux下Python自动化脚本编写到运维工具开发详解

    Python 凭借其简洁的语法、丰富的内置库与第三方生态,成为 Linux 自动化运维的首选语言,下面我们就来看看Linux下Python自动化脚本编写到运维工具开发的相关知识吧
    2025-12-12
  • python素数筛选法浅析

    python素数筛选法浅析

    这篇文章主要为大家详细介绍了python素数筛选法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python入门教程(十三)Python元组

    Python入门教程(十三)Python元组

    这篇文章主要介绍了Python入门教程(十三)Python元组,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04

最新评论