当前位置:首页>python>《Python第六期》系统资源监控脚本

《Python第六期》系统资源监控脚本

  • 2026-09-24 14:26:19
《Python第六期》系统资源监控脚本
一、脚本简介

这是一个基于 Python 的轻量级系统监控工具,利用 psutil 库实时获取 CPU、内存、磁盘使用率,并显示主机基本信息(如主机名、IP 地址、用户名)。脚本跨平台支持 Windows、Linux 和 macOS,适合开发者、运维人员或普通用户快速了解本机资源状态。


二、主要功能

  • ✅ 显示 CPU 使用率(2秒采样)
  • ✅ 显示内存总量、已用、可用及使用百分比
  • ✅ 列出所有有效磁盘分区的使用情况(自动跳过光驱等无效设备)
  • ✅ 自动识别并展示本机真实 IP 地址(非 127.0.0.1)
  • ✅ 容量单位自动转换为 GB/MB,提升可读性

三、使用方法

1. 安装依赖

bash
pip install psutil

2. 运行脚本

将代码保存为 system_monitor.py,在终端执行:

bash
python system_monitor.py

运行后,脚本会自动采集数据并格式化输出,末尾按任意键退出(Windows)或按回车退出(macOS/Linux)。


四、典型使用场景

场景
说明
🖥️ 日常电脑健康检查
快速查看是否内存不足、磁盘快满
🛠️ 开发调试辅助
监控程序运行时的资源占用
📊 教学演示
展示 Python 如何调用系统 API 获取硬件信息
🤖 自动化脚本前置检查
在执行重型任务前判断系统负载是否允许

五、注意事项

  1. 权限问题:某些磁盘分区(如系统保留分区)可能因权限不足无法读取,脚本会自动跳过,不影响整体运行。

  2. IP 地址获取:脚本通过连接公网 DNS(8.8.8.8)探测真实 IP,若设备无网络连接,将回退到主机名解析方式。

  3. CPU 采样延迟:psutil.cpu_percent(interval=2) 会阻塞 2 秒以获取准确使用率,属正常行为。

  4. 跨平台兼容性:

    • Windows 显示盘符(如 C:\)
    • Linux/macOS 显示挂载点(如 /home)脚本已自动适配,无需修改。
  5. 非实时监控:本脚本为单次快照,如需持续监控,请结合 time.sleep() 循环或使用专业工具(如 htop、Glances)。

六、完整脚本

# -*- coding: utf-8 -*-"""Python第六期:系统资源使用率查询脚本功能:获取并显示 CPU、内存、磁盘使用率及主机基本信息作者:子瞻依赖:pip install psutil"""import psutilimport osimport socketdef get_host_ip():    """获取本机真实IP地址(非127.0.0.1)"""    try:        # 创建一个UDP连接(不实际发送数据)        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:            s.connect(('8.8.8.8', 80))            ip = s.getsockname()[0]        return ip    except Exception:        return socket.gethostbyname(socket.gethostname())def get_cpu_info():    """获取CPU使用率(采样2秒)"""    return psutil.cpu_percent(interval=2)def get_mem_info():    """获取内存使用信息"""    mem = psutil.virtual_memory()    return {        'total': mem.total,        'available': mem.available,        'used': mem.used,        'free': mem.free,        'percent': mem.percent    }def get_disk_info():    """获取所有有效磁盘分区的使用情况"""    disks = []    for part in psutil.disk_partitions():        # 跳过CD-ROM或无效文件系统        if 'cdrom' in part.opts or part.fstype == '':            continue        try:            usage = psutil.disk_usage(part.device)            # 提取盘符(Windows)或挂载点(Linux/macOS)            if os.name == 'nt':  # Windows                drive_letter = part.device.rstrip('\\').rstrip('/')            else:  # Linux / macOS                drive_letter = part.mountpoint            disks.append({                'device': drive_letter,                'total': usage.total,                'used': usage.used,                'free': usage.free,                'percent': usage.percent            })        except PermissionError:            continue  # 忽略无权限访问的分区    return disksdef format_bytes(bytes_value):    """将字节转换为易读单位(GB/MB)"""    if bytes_value >= 1024 ** 3:        return f"{bytes_value / (1024 ** 3):.2f} GB"    elif bytes_value >= 1024 ** 2:        return f"{bytes_value / (1024 ** 2):.2f} MB"    else:        return f"{bytes_value} B"def main():    print("====== 基本信息 ======")    # 获取主机名:Windows 使用 COMPUTERNAME,Unix/Linux/macOS 使用 uname    if os.name == 'nt':  # Windows        hostname = os.environ.get('COMPUTERNAME', 'unknown')    else:  # Linux / macOS        import platform        hostname = platform.node() or 'unknown'    username = os.environ.get('USERNAME', os.environ.get('USER', 'unknown'))    ip_addr = get_host_ip()    print(f"主机名:{hostname}")    print(f"IP地址:{ip_addr}")    print(f"用户名:{username}")    print("====================\n")    print("===== 资源使用率 =====")    # CPU    cpu_percent = get_cpu_info()    print(f"CPU使用率:{cpu_percent:.1f}%")    # 内存    mem = get_mem_info()    print(f"内存使用率:{mem['percent']:.1f}%")    print(f"  总内存:{format_bytes(mem['total'])}")    print(f"  已用内存:{format_bytes(mem['used'])}")    print(f"  可用内存:{format_bytes(mem['available'])}")    # 磁盘    disks = get_disk_info()    for disk in disks:        free_percent = 100 - disk['percent']        print(f"\n{disk['device']} 盘使用情况:")        print(f"  使用率:{disk['percent']:.1f}%")        print(f"  空闲率:{free_percent:.1f}%")        print(f"  总容量:{format_bytes(disk['total'])}")        print(f"  已用空间:{format_bytes(disk['used'])}")        print(f"  可用空间:{format_bytes(disk['free'])}")    print("\n====================")    os.system('pause' if os.name == 'nt' else 'read -p "按回车键退出..."')if __name__ == '__main__':    main()
七、运行效果

最新文章

随机文章