当前位置: 代码网 > it编程>前端脚本>Python > 基于Python开发电脑硬件监控工具

基于Python开发电脑硬件监控工具

2025年07月21日 Python 我要评论
引言在科技飞速发展的今天,人工智能已经渗透到我们生活的方方面面,从基础的日常沟通到复杂的商业决策,智能技术的影响力正在以惊人的速度扩大。以自然语言处理为例,智能助手不仅能理解人类的日常对话,还能通过情

引言

在科技飞速发展的今天,人工智能已经渗透到我们生活的方方面面,从基础的日常沟通到复杂的商业决策,智能技术的影响力正在以惊人的速度扩大。以自然语言处理为例,智能助手不仅能理解人类的日常对话,还能通过情感分析提供个性化的回应;在医疗领域,ai辅助诊断系统的准确率已达到专业医师水平,极大地提高了早期疾病筛查的效率。

面对这场深刻的技术变革,理解其背后的逻辑与应用场景变得至关重要。从技术角度看,机器学习算法的进步(如深度学习、强化学习)为ai应用提供了强大的计算基础;从应用层面看,智能推荐系统正在重塑电商和内容平台的用户体验,而自动驾驶技术则有望彻底改变未来的交通方式。这些发展都彰显出ai技术的巨大潜力。

通过深入探讨核心原理与实践案例,我们可以更清晰地把握技术趋势。例如,分析计算机视觉在安防监控中的实际应用,或研究预测算法在金融风控中的具体表现,都能帮助我们理解不同场景下的技术适配性。这种理解不仅有助于发掘潜在商业价值,更能为未来的技术创新与产业突破奠定坚实基础。随着5g、边缘计算等配套技术的发展,ai的应用边界还将持续扩展,带来更多令人期待的可能性。

核心库选择

gputil专门用于获取nvidia gpu信息:

platform模块提供基本的系统识别功能:

gui开发选项对比:

tkinter(python标准库):

pyqt5/pyside6(第三方库):

psutil(python system and process utilities)是一个跨平台的系统监控库,可以获取系统运行时的各种关键信息:

cpu相关:

  • 使用率(psutil.cpu_percent())
  • 核心数量(psutil.cpu_count())
  • 温度监控(部分平台支持)
  • 示例:监控cpu负载并设置告警阈值

内存管理:

  • 物理内存总量及使用情况(psutil.virtual_memory())
  • 交换分区信息(psutil.swap_memory())
  • 示例:实时显示内存使用曲线图

磁盘信息:

  • 分区信息(psutil.disk_partitions())
  • 使用情况(psutil.disk_usage())
  • io统计(psutil.disk_io_counters())
  • 示例:监控磁盘剩余空间并预警

网络监控:

  • 网络接口信息(psutil.net_if_addrs())
  • io统计(psutil.net_io_counters())
  • 连接信息(psutil.net_connections())

显存使用情况

  • gpu温度监控
  • 负载百分比
  • 示例:深度学习训练时的gpu监控面板
  • 操作系统类型(platform.system())
  • 系统版本(platform.version())
  • 处理器架构(platform.machine())

示例:生成系统诊断报告

  • 优势:无需额外安装,适合简单界面
  • 缺点:界面较简陋,功能有限

示例应用:基础系统监控仪表盘

优势:

  • 丰富的ui组件(表格、图表等)
  • 支持多线程
  • 现代化界面设计

缺点:

  • 需要单独安装
  • 学习曲线较陡

示例应用:

  • 专业级系统监控工具
  • 带历史数据可视化的性能分析器

基本系统信息采集实现

import psutil
import platform
from datetime import datetime

def get_system_info():
    # cpu信息
    cpu_percent = psutil.cpu_percent(interval=1)
    cpu_count = psutil.cpu_count(logical=false)
    cpu_logical = psutil.cpu_count(logical=true)
    
    # 内存信息
    mem = psutil.virtual_memory()
    mem_total = round(mem.total / (1024**3), 2)
    mem_used = round(mem.used / (1024**3), 2)
    mem_percent = mem.percent
    
    # 磁盘信息
    disk = psutil.disk_usage('/')
    disk_total = round(disk.total / (1024**3), 2)
    disk_used = round(disk.used / (1024**3), 2)
    disk_percent = disk.percent
    
    # 系统信息
    system_info = {
        "system": platform.system(),
        "node": platform.node(),
        "release": platform.release(),
        "version": platform.version(),
        "machine": platform.machine(),
        "boot_time": datetime.fromtimestamp(psutil.boot_time()).strftime("%y-%m-%d %h:%m:%s")
    }
    
    return {
        "cpu": {
            "percent": cpu_percent,
            "cores_physical": cpu_count,
            "cores_logical": cpu_logical
        },
        "memory": {
            "total": mem_total,
            "used": mem_used,
            "percent": mem_percent
        },
        "disk": {
            "total": disk_total,
            "used": disk_used,
            "percent": disk_percent
        },
        "system": system_info
    }

添加gpu监控功能

try:
    import gputil
    def get_gpu_info():
        gpus = gputil.getgpus()
        if gpus:
            return {
                "name": gpus[0].name,
                "load": gpus[0].load * 100,
                "memory_used": round(gpus[0].memoryused, 1),
                "memory_total": round(gpus[0].memorytotal, 1),
                "temperature": gpus[0].temperature
            }
        return none
except importerror:
    def get_gpu_info():
        return none

使用tkinter构建简单gui

import tkinter as tk
from tkinter import ttk

class hardwaremonitor(tk.tk):
    def __init__(self):
        super().__init__()
        self.title("硬件监控工具")
        self.geometry("600x400")
        
        # 创建标签框架
        self.cpu_frame = ttk.labelframe(self, text="cpu 信息")
        self.mem_frame = ttk.labelframe(self, text="内存 信息")
        self.disk_frame = ttk.labelframe(self, text="磁盘 信息")
        self.sys_frame = ttk.labelframe(self, text="系统 信息")
        
        # 布局
        self.cpu_frame.pack(fill="both", expand=true, padx=5, pady=5)
        self.mem_frame.pack(fill="both", expand=true, padx=5, pady=5)
        self.disk_frame.pack(fill="both", expand=true, padx=5, pady=5)
        self.sys_frame.pack(fill="both", expand=true, padx=5, pady=5)
        
        # 添加标签
        self.cpu_label = ttk.label(self.cpu_frame, text="")
        self.mem_label = ttk.label(self.mem_frame, text="")
        self.disk_label = ttk.label(self.disk_frame, text="")
        self.sys_label = ttk.label(self.sys_frame, text="")
        
        self.cpu_label.pack()
        self.mem_label.pack()
        self.disk_label.pack()
        self.sys_label.pack()
        
        self.update_data()
    
    def update_data(self):
        data = get_system_info()
        gpu_data = get_gpu_info()
        
        # 更新cpu信息
        cpu_text = f"使用率: {data['cpu']['percent']}% | 物理核心: {data['cpu']['cores_physical']} | 逻辑核心: {data['cpu']['cores_logical']}"
        self.cpu_label.config(text=cpu_text)
        
        # 更新内存信息
        mem_text = f"使用: {data['memory']['used']}gb / {data['memory']['total']}gb ({data['memory']['percent']}%)"
        self.mem_label.config(text=mem_text)
        
        # 更新磁盘信息
        disk_text = f"使用: {data['disk']['used']}gb / {data['disk']['total']}gb ({data['disk']['percent']}%)"
        self.disk_label.config(text=disk_text)
        
        # 更新系统信息
        sys_text = f"系统: {data['system']['system']} {data['system']['release']} | 主机名: {data['system']['node']} | 启动时间: {data['system']['boot_time']}"
        self.sys_label.config(text=sys_text)
        
        # 如果有gpu信息则显示
        if gpu_data:
            if not hasattr(self, 'gpu_frame'):
                self.gpu_frame = ttk.labelframe(self, text="gpu 信息")
                self.gpu_frame.pack(fill="both", expand=true, padx=5, pady=5)
                self.gpu_label = ttk.label(self.gpu_frame, text="")
                self.gpu_label.pack()
            
            gpu_text = f"{gpu_data['name']} | 负载: {gpu_data['load']:.1f}% | 显存: {gpu_data['memory_used']}gb/{gpu_data['memory_total']}gb | 温度: {gpu_data['temperature']}°c"
            self.gpu_label.config(text=gpu_text)
        
        self.after(1000, self.update_data)

使用pyqt5构建更专业的界面

from pyqt5.qtwidgets import (qapplication, qmainwindow, qvboxlayout, 
                            qwidget, qlabel, qtabwidget, qprogressbar)
from pyqt5.qtcore import qtimer
import sys

class qthardwaremonitor(qmainwindow):
    def __init__(self):
        super().__init__()
        self.setwindowtitle("硬件监控工具")
        self.setgeometry(100, 100, 800, 600)
        
        self.central_widget = qwidget()
        self.setcentralwidget(self.central_widget)
        
        self.layout = qvboxlayout(self.central_widget)
        
        self.tabs = qtabwidget()
        self.layout.addwidget(self.tabs)
        
        # 创建标签页
        self.cpu_tab = qwidget()
        self.mem_tab = qwidget()
        self.disk_tab = qwidget()
        self.sys_tab = qwidget()
        
        self.tabs.addtab(self.cpu_tab, "cpu")
        self.tabs.addtab(self.mem_tab, "内存")
        self.tabs.addtab(self.disk_tab, "磁盘")
        self.tabs.addtab(self.sys_tab, "系统")
        
        # 初始化ui
        self.init_cpu_tab()
        self.init_mem_tab()
        self.init_disk_tab()
        self.init_sys_tab()
        
        # 定时更新
        self.timer = qtimer()
        self.timer.timeout.connect(self.update_data)
        self.timer.start(1000)
    
    def init_cpu_tab(self):
        layout = qvboxlayout(self.cpu_tab)
        
        self.cpu_label = qlabel("cpu 信息")
        self.cpu_progress = qprogressbar()
        
        layout.addwidget(self.cpu_label)
        layout.addwidget(self.cpu_progress)
    
    def update_data(self):
        data = get_system_info()
        
        # 更新cpu信息
        cpu_text = f"cpu 使用率: {data['cpu']['percent']}% | 物理核心: {data['cpu']['cores_physical']} | 逻辑核心: {data['cpu']['cores_logical']}"
        self.cpu_label.settext(cpu_text)
        self.cpu_progress.setvalue(data['cpu']['percent'])
        
        # 更新其他标签页...

高级功能扩展

实时图表显示 使用matplotlib可以创建实时更新的硬件使用率图表:

from matplotlib.backends.backend_tkagg import figurecanvastkagg
from matplotlib.figure import figure

class chartmonitor(tk.tk):
    def __init__(self):
        super().__init__()
        self.title("硬件监控图表")
        
        # 创建图表
        self.fig = figure(figsize=(5, 4), dpi=100)
        self.ax = self.fig.add_subplot(111)
        
        # 初始化数据
        self.x_data = list(range(60))
        self.y_data = [0] * 60
        
        # 创建画布
        self.canvas = figurecanvastkagg(self.fig, master=self)
        self.canvas.draw()
        self.canvas.get_tk_widget().pack(side=tk.top, fill=tk.both, expand=true)
        
        self.update_chart()
    
    def update_chart(self):
        # 获取当前cpu使用率
        cpu_percent = psutil.cpu_percent(interval=1)
        
        # 更新数据
        self.y_data.append(cpu_percent)
        if len(self.y_data) > 60:
            self.y_data.pop(0)
        
        # 清除并重新绘制
        self.ax.clear()
        self.ax.plot(self.x_data, self.y_data[-60:], 'r-')
        self.ax.set_ylim(0, 100)
        self.ax.set_title("cpu 使用率 (%)")
        self.ax.set_xlabel("时间 (秒)")
        
        self.canvas.draw()
        self.after(1000, self.update_chart)

网络监控功能 可以扩展网络监控功能:

def get_network_info():
    net_io = psutil.net_io_counters()
    return {
        "bytes_sent": net_io.bytes_sent,
        "bytes_recv": net_io.bytes_recv,
        "packets_sent": net_io.packets_sent,
        "packets_recv": net_io.packets_recv
    }

打包为可执行文件

使用pyinstaller可以将应用打包为独立可执行文件:

pip install pyinstaller
pyinstaller --onefile --windowed hardware_monitor.py

这些方法提供了从简单到高级的硬件监控实现方案,可以根据需求选择合适的组件进行组合或扩展。具体来说:

基础监控方案

适用于入门级需求,主要包含:

  • cpu/gpu温度监控(如使用lm-sensors工具)
  • 内存使用率统计(通过free -m命令)
  • 磁盘空间检查(df -h命令) 应用场景:个人开发者调试或小型服务器基础运维

中级监控方案

增加实时性和可视化能力:

# prometheus配置片段
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.100:9100']
  • 使用prometheus+grafana搭建监控仪表盘
  • 集成网络流量监控(如nload工具)
  • 添加smart硬盘健康检测 典型配置示例:

高级企业级方案

包含自动化预警和分布式监控:

  • 部署zabbixnagios监控集群
  • 实现snmp协议设备管理
  • 定制化开发监控插件(如通过python编写硬件探针) 扩展建议:
  • 对关键业务服务器配置双通道监控
  • 建立分级告警机制(邮件/短信/企业微信通知)

特殊场景方案

  • 工业环境:增加4-20ma信号采集模块
  • 边缘计算:部署轻量级telegraf代理
  • 高安全要求:采用硬件加密的监控数据链路

方案选择时需综合考虑硬件规模(单机/集群)、监控粒度(秒级/分钟级)以及预算成本。建议从基础方案开始,逐步按需扩展功能模块。

以上就是基于python开发电脑硬件监控工具的详细内容,更多关于python监控的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com