Python系统信息案例如何获取电脑系统信息

wen python案例 23

本文目录导读:

Python系统信息案例如何获取电脑系统信息

  1. 目录导读
  2. 为什么选择Python获取系统信息?
  3. 必备库与基础环境配置
  4. 案例一:获取操作系统基础信息
  5. 案例二:获取CPU与内存详细信息
  6. 案例三:获取磁盘与网络信息
  7. 常见问题解答(Q&A)
  8. 总结与最佳实践

Python系统信息案例详解:如何高效获取电脑系统信息

目录导读

  • 为什么选择Python获取系统信息?

  • 必备库与基础环境配置

  • 获取操作系统基础信息

  • 获取CPU与内存详细信息

  • 获取磁盘与网络信息

  • 常见问题解答(Q&A)

  • 总结与最佳实践


为什么选择Python获取系统信息?

在日常开发、运维监控或自动化脚本中,快速获取电脑系统信息是一项高频需求,Python凭借其丰富的标准库和第三方模块,成为实现这一目标的理想语言,无论你是需要获取操作系统版本、CPU使用率,还是磁盘空间、网络接口状态,Python都能以简洁的代码完成,更重要的是,Python跨平台特性(Windows、macOS、Linux)确保同一套脚本几乎无需修改即可在不同系统上运行,大幅降低维护成本。

与手动操作或使用命令行工具相比,Python系统信息采集可以实现定时抓取、日志记录、触发告警等高级功能,尤其适合自动化运维(AIOps)、设备监控、性能分析等真实场景,以下案例将从基础到进阶,全方位展示如何用Python提取电脑系统信息的精华。


必备库与基础环境配置

在开始案例前,需安装核心依赖库psutil(Python System and Process Utilities),该库封装了系统调用,提供CPU、内存、磁盘、网络、进程等全方位信息。

pip install psutil

标准库中的platformsocketos等模块也会用到,它们无需额外安装,建议在Python 3.6及以上版本中运行代码,若需可视化或导出信息,还可搭配jsoncsvmatplotlib等库。


案例一:获取操作系统基础信息

第一个案例演示如何快速获取电脑的操作系统名称、版本、架构、主机名、运行时间等基础信息。

import platform
import socket
import psutil
import datetime
def get_base_info():
    info = {}
    info['系统名称'] = platform.system()
    info['系统版本'] = platform.version()
    info['架构'] = platform.machine()
    info['处理器'] = platform.processor()
    info['主机名'] = socket.gethostname()
    # 系统启动时间
    boot_time = datetime.datetime.fromtimestamp(psutil.boot_time())
    info['系统启动时间'] = boot_time.strftime("%Y-%m-%d %H:%M:%S")
    # 开机时长(天)
    uptime_days = (datetime.datetime.now() - boot_time).days
    info['已运行天数'] = f"{uptime_days}天"
    return info
for k, v in get_base_info().items():
    print(f"{k}: {v}")

输出示例:

系统名称: Windows
系统版本: 10.0.19045
架构: AMD64
处理器: Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
主机名: DESKTOP-ABC123
系统启动时间: 2025-02-21 08:30:12
已运行天数: 5天

此代码利用platform模块获取跨平台常量,psutil.boot_time()返回启动时间戳,结合datetime计算运行时长。


案例二:获取CPU与内存详细信息

CPU与内存是系统性能的核心指标,本案例将获取CPU物理核心数、逻辑核心数、使用率(百分比)、频率,以及内存总量、已用、可用空间。

import psutil
def get_cpu_memory_info():
    cpu_info = {}
    # CPU信息
    cpu_info['物理核心数'] = psutil.cpu_count(logical=False)
    cpu_info['逻辑核心数'] = psutil.cpu_count(logical=True)
    cpu_info['当前使用率(%)'] = psutil.cpu_percent(interval=1)  # 采样1秒
    cpu_freq = psutil.cpu_freq()
    if cpu_freq:
        cpu_info['当前频率(MHz)'] = cpu_freq.current
        cpu_info['最大频率(MHz)'] = cpu_freq.max
    # 内存信息
    mem = psutil.virtual_memory()
    mem_info = {
        '内存总量(GB)': round(mem.total / (1024**3), 2),
        '已用内存(GB)': round(mem.used / (1024**3), 2),
        '可用内存(GB)': round(mem.available / (1024**3), 2),
        '内存使用率(%)': mem.percent,
    }
    return cpu_info, mem_info
cpu, mem = get_cpu_memory_info()
print("CPU信息:", cpu)
print("内存信息:", mem)

输出示例:

CPU信息: {'物理核心数': 4, '逻辑核心数': 8, '当前使用率(%)': 23.0, '当前频率(MHz)': 2496.0, '最大频率(MHz)': 4100.0}
内存信息: {'内存总量(GB)': 16.0, '已用内存(GB)': 8.45, '可用内存(GB)': 7.55, '内存使用率(%)': 52.8}

关键点:psutil.cpu_percent(interval=1)需要等待1秒完成采样,以获得准确瞬时负载。psutil.virtual_memory()返回类似命名元组的对象,包含totalusedavailablepercent等字段。


案例三:获取磁盘与网络信息

磁盘和网络信息对存储管理和网络诊断至关重要,以下代码获取所有磁盘分区的使用情况,以及网络接口的IP地址、发送/接收字节数。

import psutil
import socket
def get_disk_network_info():
    # 磁盘信息
    disk_info = {}
    for part in psutil.disk_partitions():
        if part.mountpoint:
            usage = psutil.disk_usage(part.mountpoint)
            disk_info[part.mountpoint] = {
                '总容量(GB)': round(usage.total / 1024**3, 2),
                '已用(GB)': round(usage.used / 1024**3, 2),
                '可用(GB)': round(usage.free / 1024**3, 2),
                '使用率(%)': usage.percent,
                '文件系统': part.fstype,
            }
    # 网络信息(只取IPv4)
    net_info = {}
    for interface, addrs in psutil.net_if_addrs().items():
        for addr in addrs:
            if addr.family == socket.AF_INET:
                net_info[interface] = {'IP地址': addr.address}
    # 整体网络IO统计
    net_io = psutil.net_io_counters()
    net_info['全局统计'] = {
        '发送总字节(MB)': round(net_io.bytes_sent / 1024**2, 2),
        '接收总字节(MB)': round(net_io.bytes_recv / 1024**2, 2),
        '发送总包数': net_io.packets_sent,
        '接收总包数': net_io.packets_recv,
    }
    return disk_info, net_info
disk, net = get_disk_network_info()
print("磁盘信息:", disk)
print("网络信息:", net)

输出示例(部分):

磁盘信息: {'C:\\': {'总容量(GB)': 238.46, '已用(GB)': 128.3, '可用(GB)': 110.16, '使用率(%)': 53.8, '文件系统': 'NTFS'}, 'D:\\': ...}
网络信息: {'以太网': {'IP地址': '192.168.1.100'}, 'Wi-Fi': {'IP地址': '172.16.0.5'}, '全局统计': {'发送总字节(MB)': 12548.3, '接收总字节(MB)': 36528.9, ...}}

此案例展示了psutil.disk_partitions()自动过滤无效挂载点(如Linux的/sys、/proc),仅返回实际分区,网络接口过滤IPv4地址需匹配socket.AF_INET,IPv6地址可用socket.AF_INET6


常见问题解答(Q&A)

问题1:为什么psutil.cpu_percent()返回过高的值? 回答:首次调用该函数且interval设置为0时,可能返回0或瞬时值,推荐设置interval=1(等待1秒)以获取真实平均负载,若需连续监控,可循环调用并取多次均值。

问题2:如何获取GPU信息(如显存、显卡型号)? 回答:psutil原生不支持GPU,可使用第三方库GPUtil(只支持NVIDIA)、pynvml(NVIDIA的Python绑定)或wmi(Windows下获取WMI类),示例:pip install gputil,然后import GPUtil; GPUtil.getGPUs()

问题3:如何在Linux/macOS上兼容运行? 回答:以上案例全部基于跨平台库psutilplatform,在三大主流操作系统上均可运行,无需修改代码,唯一区别是磁盘挂载点路径(Windows为驱动器号,Linux/macOS为或/mnt等)。

问题4:如何将系统信息导出为JSON文件? 回答:将获取的字典用json.dump()写入文件,

import json
info = get_base_info()  # 或其他函数返回值
with open('sys_info.json', 'w') as f:
    json.dump(info, f, ensure_ascii=False, indent=4)

问题5:为什么磁盘总量与实际硬盘标称不一致? 回答:硬盘厂商使用十进制计算(1GB=1,000,000,000字节),而操作系统和psutil使用二进制计算(1GiB=1,073,741,824字节),导致数值差异,这是正常现象。


总结与最佳实践

通过以上三个案例,你已经掌握了使用Python获取电脑系统信息的核心方法,总结关键原则:

  • 推荐优先使用psutil:它抽象了平台差异,提供简洁API。
  • 标准库作为补充platform用于基础OS信息,socket用于网络类型判断。
  • 注意权限:某些信息(如进程详细内存、网卡状态)需要管理员/root权限。
  • 采集频率控制:避免高频调用psutil.cpu_percent(interval=1)造成性能开销,生产环境建议间隔5秒以上。

最佳实践建议:将信息采集封装为函数,定期写入日志或数据库,结合告警规则(如内存使用率>90%触发警报)可构建轻量级监控系统,可尝试扩展获取进程列表、硬件温度(需psutil.sensors_temperatures(),仅Linux)、电池信息等,以满足更复杂的需求。

掌握Python系统信息采集,你不仅能在日常开发中快速诊断问题,还能为自动化运维和数据可视化奠定坚实基础,立即运行上述代码,探索你的电脑隐藏的细节吧!

抱歉,评论功能暂时关闭!