09年的老电脑说想看一下CPU温度,作为Python工程师,怎能安装X大师?
⛳️ 实战场景
作为一个老程序员,手里有那么几台老电脑也是理所应当的吧,这不最近又买了一台 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 处理器对象列表。
可以通过 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
,即下文的引用文件。
获取温度的示例代码如下所示,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 篇原创博客
- 点赞
- 收藏
- 关注作者
评论(0)