Python硬件信息案例有哪些?

wen python案例 2

Python硬件信息案例有哪些?从入门到实战的全景指南

目录导读

  1. Python获取硬件信息的核心原理
  2. 实战案例一:CPU信息采集(型号、核心数、使用率)
  3. 实战案例二:内存与磁盘状态监控(容量、读写速度)
  4. 实战案例三:网络接口与IP地址解析
  5. 实战案例四:跨平台系统信息(Windows/Linux/macOS)
  6. 常见问题与最佳实践
  7. 问答环节:你关心的硬件信息问题

Python获取硬件信息的核心原理

Python 获取硬件信息依赖系统底层的接口调用,在 Linux 上,通常通过读取 /proc 虚拟文件系统(如 /proc/cpuinfo/proc/meminfo);在 Windows 上,则借助 Windows Management Instrumentation(WMI)或 winreg 模块;macOS 则通过 sysctl 命令或 plist 文件。
第三方库如 psutilplatformwmi 封装了这些底层操作,让开发者只需几行代码就能拿到数据。

例:

import psutil
print(psutil.cpu_count(logical=True))  # 逻辑CPU数量

实战案例一:CPU信息采集

场景: 监控服务器CPU频率、负载、核心数等。
代码示例:

import psutil
import platform
# 获取CPU型号(Windows/Linux差异处理)
if platform.system() == "Windows":
    import wmi
    c = wmi.WMI()
    for processor in c.Win32_Processor():
        cpu_model = processor.Name
else:
    cpu_model = platform.processor() or "Unknown"
# 核心数与使用率
print(f"CPU型号: {cpu_model}")
print(f"物理核心: {psutil.cpu_count(logical=False)}")
print(f"逻辑核心: {psutil.cpu_count(logical=True)}")
print(f"当前使用率: {psutil.cpu_percent(interval=1)}%")

案例亮点: 结合 platformwmi 实现跨平台兼容,避免在Linux下调用Windows接口。


实战案例二:内存与磁盘状态监控

内存监控:

mem = psutil.virtual_memory()
print(f"总内存: {mem.total // (1024**3)} GB")
print(f"已用: {mem.percent}%")

磁盘监控(读写速度与分区信息):

# 磁盘分区与使用率
for part in psutil.disk_partitions():
    usage = psutil.disk_usage(part.mountpoint)
    print(f"{part.device} 总容量: {usage.total // (1024**3)} GB, 已用: {usage.percent}%")
# 磁盘IO统计
io = psutil.disk_io_counters()
print(f"读取字节: {io.read_bytes // (1024**3)} GB")
print(f"写入字节: {io.write_bytes // (1024**3)} GB")

注意: 磁盘IO数据是累计值,需要两次采样计算速率。


实战案例三:网络接口与IP地址解析

获取本机IP、MAC地址及流量:

import socket
import psutil
import uuid
# 获取IP与主机名
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
print(f"主机名: {hostname}, IP: {ip}")
# 所有网络接口信息
for name, stats in psutil.net_if_stats().items():
    print(f"接口: {name}, 状态: {'启用' if stats.isup else '禁用'}, 速度: {stats.speed} Mbps")
# 网络IO
net = psutil.net_io_counters()
print(f"发送字节: {net.bytes_sent // (1024**2)} MB")
print(f"接收字节: {net.bytes_recv // (1024**2)} MB")
# MAC地址
print(f"MAC: {':'.join(['{:02x}'.format((uuid.getnode() >> i) & 0xff) for i in range(0, 48, 8)][::-1])}")

实战案例四:跨平台系统信息

全面系统概览:

import platform
print(f"系统: {platform.system()} {platform.release()}")
print(f"Python版本: {platform.python_version()}")
print(f"架构: {platform.machine()}")
# 结合psutil获取启动时间
import datetime
boot_time = datetime.datetime.fromtimestamp(psutil.boot_time())
print(f"系统启动时间: {boot_time}")

高级技巧: 在Windows上使用 wmi 查询BIOS信息,在Linux上读取 /proc/uptime


常见问题与最佳实践

Q1:在Windows上使用psutil报错接口不存在?
A:需要 pip install pywin32,并确保管理员权限(部分信息需要)。

Q2:如何区分物理核心与逻辑核心?
A:psutil.cpu_count(logical=False) 返回物理核心数,logical=True 返回超线程后的逻辑核心数。

Q3:磁盘IO速率怎么实时计算?
A:每间隔1秒采集两次 psutil.disk_io_counters(),差值除以时间间隔即可。

最佳实践清单:

  • 使用异常捕获处理平台差异(如Linux无WMI模块)。
  • 频繁采集数据时用 interval 参数避免阻塞主进程。
  • 将硬件信息输出为JSON格式,便于日志或API传输。
  • 利用 cachetools 缓存静态数据(如CPU型号),减少系统调用。

问答环节:你关心的硬件信息问题

问题1:Python获取GPU信息用什么库?
答:推荐 pynvml(NVIDIA显卡)或 GPUtil,可以获取显存使用率、温度等,AMD显卡可使用 amdgpu 工具或 pyadl

问题2:能否从远程主机获取硬件信息?
答:可以借助 paramiko 通过SSH远程执行Python脚本,或使用 ansiblegather_facts 模块收集。

问题3:采集到的信息如何可视化?
答:配合 matplotlibplotly 绘制CPU/内存/磁盘的实时折线图,用 psutilsensors_temperatures() 绘制CPU温度热力图。

问题4:为什么读取 /proc/cpuinfo 在容器中不准确?
答:容器默认共享宿主内核,需使用 lscpu 命令或读取 /sys/devices/system/cpu/ 下的文件。psutil 在Docker中会自动适应。


通过以上案例,你可以构建从简单系统信息脚本到企业级监控方案的基础,实际项目中,建议将不同模块封装成类,并加入日志与异常告警,如需完整代码仓库,可在主流代码托管平台搜索“python-hardware-monitor”参考开源项目。

标签: psutil wmi

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