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

语言: CN / TW / HK

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

⛳️ 实战场景

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

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

⛳️ 编码调试

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

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

shell pip install wmi

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

```python 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 型号。

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

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

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

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

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

示例代码如下所示:

```python import wmi

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

print(obj) ```

输出内容如下:

shell 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(),获取操作系统相关信息。

```python if name == 'main': import wmi

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

print(obj)

```

wmi.Win32_DiskDrive 获取电脑磁盘信息

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

```python import wmi

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

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

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

```python import wmi

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

⛳️ 编码获取温度

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

下载地址:https://openhardwaremonitor.org/downloads/

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

shell pip install pythonnet

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

```python 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 温度:

```python

使用 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 篇原创博客

「其他文章」