当前位置: 首页 > news >正文

软件集成:守护核心——优化系统守护者,实时监测硬件健康

目录

前言

正文

一、系统选型和搭建

二、系统功能与设计

持续信息获取

获取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()函数获取虚拟内存的详细信息&#

http://www.mrgr.cn/news/48386.html

相关文章:

  • Vue3 重置ref或者reactive属性值
  • 模具生产过程中的标签使用流程图
  • WPF 布局控件
  • 【Qt】QWidget中的常见属性及其功能(二)
  • 为什么要用单例模式?
  • 如何使用 TypeScript 和 Jest 编写高质量单元测试
  • 蒙特卡罗方法 - 不同的峰值之间的混合挑战篇
  • 勇攀保研高峰:解锁环节与要点,更容易上岸成功
  • 【多线程】多线程(12):多线程环境下使用哈希表
  • Matplotlib教程(003):Matplotlib绘图画布配置
  • qt数据库的系统
  • CANoe_使用C#动态生成控件快速部署程序
  • 【分布式架构】分布式锁Redission
  • NumPy 第十一课 -- 广播(Broadcast)
  • MySQL8.0如何优化网卡MTU值,提高数据库性能?
  • 硬盘数据恢复工具:拯救数据丢失的利器
  • Python | Leetcode Python题解之第474题一和零
  • 数据库SQL基础教程(二)
  • 学习 go 语言开发一个月能赚 10 万?
  • Git 常用的操作命令大全
  • 物理学基础精解【73】
  • 连接达梦数据库的N种方式
  • 48 C 语言实战项目——客户信息管理系统
  • 一天认识一个硬件之散热器
  • 华为启动鸿蒙原生应用开发者激励计划 12月31日前上架最高可获10万元
  • Java | Leetcode Java题解之第474题一和零