09年的老电脑说想看一下CPU温度,作为Python工程师,怎能安装X大师?

1,505 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

⛳️ 实战场景

作为一个老程序员,手里有那么几台老电脑也是理所应当的吧,这不最近又了一台 09 年的旧机器,计划让其变为一个局域网小网盘服务器,但是问题出现了,我需要监测一下 CPU 温度,安装某大师显然是不现实的,我担心被安装了全家桶,毕竟旧电脑的硬盘和内存本就不富裕,万一被全家桶安排了,又要重新安装系统和软件,太浪费时间了。

那提炼一下需求吧,在不安装 X 大师的前提下,监测 CPU 温度

⛳️ 编码调试

本篇博客的实例先从 wmi 模块开始学习,WMI 模块可以访问,配置,管理 Windows 的资源,例如操作进行,定时任务,远程启动计算机,获取事件日志,操作注册表,获取电脑 CPI 信息。

使用前先通过下述命令安装模块。

pip install wmi

先学习一下 CPU 相关信息的示例代码:

import wmi


def get_cpu():
    c = wmi.WMI()

    cpu_list = c.Win32_Processor()
    print(cpu_list)

if __name__ == '__main__':
    get_cpu()

上述代码先通过 wmi.WMI() 实例化了一个 wmi 对象,然后调用其 Win32_Processor() 方法,获取 CPU 处理器对象列表。

09年的老电脑说想看一下CPU温度,作为Python工程师,怎能安装X大师? 可以通过 cpu.Name 获取 CPU 型号。

for cpu in cpu_list:
     print("CPU型号:", cpu.Name)

橡皮擦本地电脑的型号如下所示:

CPU型号: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz

可以通过 cpu.NumberOfCores 获取核心数,更多参数可以通过 help() 函数获取。

wmi.Win32_ComputerSystem 获取电脑的制造商,机器型号

示例代码如下所示:

import wmi

w = wmi.WMI()
obj = w.Win32_ComputerSystem()[0]

print(obj)

输出内容如下:

instance of Win32_ComputerSystem
{
	AdminPasswordStatus = 3;
	AutomaticManagedPagefile = TRUE;
	AutomaticResetBootOption = TRUE;
	……
	EnableDaylightSavingsTime = TRUE;
	FrontPanelResetStatus = 3;
	HypervisorPresent = FALSE;
	InfraredSupported = FALSE;
	KeyboardPasswordStatus = 3;
	Manufacturer = "Colorful Technology And Development Co.,LTD";
	Model = "Battle Axe C.xxxx";
	Name = "DESKTOP-xxxxx";
	……
	UserName = "DESKTOP-xxxxx\\Admin";
	WakeUpType = 6;
	Workgroup = "WORKGROUP";
};

与该方法类似的有 wmi.Win32_OperatingSystem(),获取操作系统相关信息。

if __name__ == '__main__':
    import wmi

    w = wmi.WMI()
    obj = w.Win32_OperatingSystem()[0]

    print(obj)

wmi.Win32_DiskDrive 获取电脑磁盘信息

查看电脑硬盘分区,硬盘大小,硬盘制造商等数据,可以使用 wmi.Win32_DiskDrive() 方法进行操作,代码如下:

import wmi

w = wmi.WMI()
disk = w.Win32_DiskDrive()
print(disk)

wmi.Win32_Process 获取进程,wmi.Win32_Service 获取服务

进程和服务的获取,也可以直接调用 wmi 对象的方法,示例代码如下所示:

import wmi

w = wmi.WMI()
p = w.Win32_Process()[0]
print(p)

⛳️ 编码获取温度

原计划直接使用 wmi 获取 CPU 温度,实战之后发现部分电脑并未提供温度接口,只能进行曲线编码了。先做一下准备工作,下载 OpenHardwareMonitor 文件,目标获取其压缩包中的 OpenHardwareMonitorLib.dll ,即下文的引用文件。

下载地址:openhardwaremonitor.org/downloads/

获取温度的示例代码如下所示,import clr 使用前,需安装对应模块:

pip install pythonnet

准备工作完成,可直接参考下述代码,获取一次 CPU 温度,多次获取需要写死循环实现。

import clr # 导入 pythonnet 模块
# OpenHardwareMonitorLib 路径
clr.AddReference(r'C:\Users\Admin\Downloads\openhardwaremonitor-v0.9.6\OpenHardwareMonitor\OpenHardwareMonitorLib.dll')

# 导入 dll 中的 Computer 模块
from OpenHardwareMonitor.Hardware import Computer

c = Computer()

c.CPUEnabled = True # 获取 CPU 相关信息
c.GPUEnabled = True # 获取 GPU 相关信息
c.Open()
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())

上述代码运行时还需要特别注意下,需要使用管理员权限运行,例如在控制台操作,需要用管理员身份打开控制台,在 PyCharm 中操作,也需要用管理员身份打开。

上述获取温度的代码实现比较复杂,那有没有简单的方式呢,还真有(但是大家获取的值都不是很准确):

安装 pyspectator 模块获取 CPU 温度:

# 使用 pyspectator 模块获取电脑温度
import time
from pyspectator.processor import Cpu
cpu = Cpu(monitoring_latency=1)
with cpu:
    while True:
        print(f' 温度: {cpu.temperature} °C')
        time.sleep(2)

📢📢📢📢📢📢 💗 你正在阅读 【梦想橡皮擦】 的博客 👍 阅读完毕,可以点点小手赞一下 🌻 发现错误,直接评论区中指正吧 📆 橡皮擦的第 726 篇原创博客