软件集成:守护核心——优化系统守护者,实时监测硬件健康
目录
前言
正文
一、系统选型和搭建
二、系统功能与设计
持续信息获取
获取CPU的信息
获取GPU的信息
健康评估设计
三、GUI界面内容显示
健康评价信息显示
硬件信息显示
四、自动化操作和窗口创建
自动化
窗口创建
五、软件化
前言
这是对“系统守护者”的一次优化,“系统守护者”本意设计为python与.NET程序进行联动,使其通过.NET程序获取相关的硬件信息,然后python获取.NET程序得到的信息进行显示,但是由于两者语言存在差异性、版本兼容性的管理等相关方面,导致两者通讯困难,因此难以在“系统守护者”中实现python获取.NET程序信息显示在GUI界面中。
对此,针对python与.NET程序之间的通讯的复杂性,接下来进行了相关改进,去掉了.NET程序,通过wmi服务来获取硬件传感器信息。
wmi服务是Windows系统中的一个核心组成部分,提供了一种用于管理本地计算机和远程计算机的标准化方法。此不仅支持本地访问,还支持通过网络进行远程管理,使得系统管理员能够使用脚本和管理工具来查询系统信息、管理系统资源等等。
正文
一、系统选型和搭建
此项目采用python为核心,整合多种库以此构建出实时监控系统,帮助我们能够实时得出系统GPU和CPU的健康状态。
关键库的解释:
tkinter:构建直观的GUI界面。
psutil:提供系统级监控,监控CPU和内存的状况。
GPUtil:获取GPU实时信息。
wmi:调用Windows Management Instrumentation服务获取硬件传感器信息。
subprocess:用于执行外部命令,以此更好获取CPU信息。
pywinauto:用于自动化操作,最小化应用程序的窗口。
代码中也用到了OpenHardwareMonitor软件,我的电脑的硬件好似不支持直接查询CPU相关信息,为此为了方便使用了此软件。它能够直接与硬件通讯,可以获取到CPU等相关硬件的信息,能够为我们提供更加广泛和详细的监控数据。因此直接利用这个软件的数据就行了,而这需要打开软件,对此引入了自动化操作帮我缩小化窗口,软件要一直运行才能持续获取CPU的温度。
代码片段:
# 导入必要的库
import tkinter as tk # GUI库,用于创建图形界面
import psutil # 系统监控库,读取CPU和内存信息
import GPUtil # GPU信息读取
import wmi # 用于监控硬件设备
import subprocess # 用于执行外部命令
import time # 时间延迟
from pywinauto import Application # 用于自动化操作Windows应用程序OHM_PATH = r"D:\CPU\OpenHardwareMonitor.exe" # OpenHardwareMonitor的绝对路径subprocess.Popen([OHM_PATH], shell=False, creationflags=subprocess.CREATE_NO_WINDOW) # 启动OpenHardwareMonitor软件w = wmi.WMI(namespace="root\\OpenHardwareMonitor") # 创建一个wmi对象,用于调用wmi服务, 使用OpenHardwareMonitor命名空间
二、系统功能与设计
持续信息获取
我在代码中已经进行了详细的注释,对此我不再进行详细的解释。
获取CPU的信息
# 定义获取CPU使用率的函数
def get_cpu_usage():return psutil.cpu_percent(interval=2) # 每隔2秒获取CPU的使用率# 定义获取CPU名称的函数
def get_cpu_name():try:# 使用subprocess模块执行powershell命令,这个命令通过CIM(Common Information Model)接口获取处理器信息# "Get-CimInstance Win32_Processor"获取所有处理器实例数据# "Select-Object -ExpandProperty Name"选择Name属性进行输出# shell=True表示在shell环境中执行命令cpu_info = subprocess.check_output("powershell -command \"Get-CimInstance Win32_Processor | Select-Object -ExpandProperty Name\"",shell=True)cpu_info = cpu_info.decode().strip() # 将获取到的字节流数据解码为字符串,并去除前后空白字符return cpu_info if cpu_info else "未知CPU" # 如果cpu_info非空,返回它;否则返回"未知CPU"# 捕获并处理可能出现的任何异常except Exception as e:print(f"获取CPU名称时出错: {e}") # 如果在执行上述操作时发生错误,打印错误信息return "不能识别CPU" # 返回"未能识别CPU",表示无法获取CPU名称# 定义获取CPU内存使用情况的函数
def get_cpu_memory_usage():memory = psutil.virtual_memory() # 调用psutil的virtual_memory()函数获取虚拟内存的详细信息&#