上一篇
Python psutil模块使用教程 - 系统监控与进程管理 | Python系统编程指南
- Python
- 2025-08-01
- 979
Python psutil模块使用教程
全面指南:监控系统资源、管理进程、获取硬件信息
什么是psutil模块?
psutil(process and system utilities)是一个跨平台库,用于在Python中获取系统运行的进程和系统利用率(CPU、内存、磁盘、网络等)信息。
主要功能包括:
- 获取CPU使用率
- 监控内存使用情况
- 查看磁盘IO和分区信息
- 获取网络接口和流量统计
- 管理系统进程
- 获取系统启动时间和用户信息
安装psutil
使用pip安装psutil非常简单:
pip install psutil
支持的操作系统:Windows、Linux、macOS、FreeBSD等。
获取CPU信息
使用psutil获取CPU使用率和相关信息:
示例1:获取CPU使用率
import psutil # 获取CPU使用率(间隔1秒) cpu_percent = psutil.cpu_percent(interval=1) print(f"当前CPU使用率: {cpu_percent}%") # 获取每个CPU核心的使用率 cpu_percent_per_core = psutil.cpu_percent(interval=1, percpu=True) for i, percent in enumerate(cpu_percent_per_core): print(f"CPU核心 {i} 使用率: {percent}%")
示例2:获取CPU统计信息
# 获取CPU频率 cpu_freq = psutil.cpu_freq() print(f"当前频率: {cpu_freq.current}MHz") print(f"最小频率: {cpu_freq.min}MHz") print(f"最大频率: {cpu_freq.max}MHz") # 获取CPU时间信息 cpu_times = psutil.cpu_times() print(f"用户模式时间: {cpu_times.user}秒") print(f"系统模式时间: {cpu_times.system}秒") print(f"空闲时间: {cpu_times.idle}秒")
监控内存使用
psutil提供详细的内存使用信息:
示例3:获取内存使用情况
# 获取物理内存使用情况 mem = psutil.virtual_memory() print(f"总内存: {mem.total / (1024 ** 3):.2f} GB") print(f"可用内存: {mem.available / (1024 ** 3):.2f} GB") print(f"已使用内存: {mem.used / (1024 ** 3):.2f} GB") print(f"使用率: {mem.percent}%") # 获取交换内存(虚拟内存)信息 swap = psutil.swap_memory() print(f"交换内存总量: {swap.total / (1024 ** 3):.2f} GB") print(f"已使用交换内存: {swap.used / (1024 ** 3):.2f} GB") print(f"交换内存使用率: {swap.percent}%")
磁盘信息与IO监控
使用psutil获取磁盘分区信息和IO统计数据:
示例4:获取磁盘分区信息
# 获取磁盘分区信息 partitions = psutil.disk_partitions() for partition in partitions: print(f"设备: {partition.device}") print(f"挂载点: {partition.mountpoint}") print(f"文件系统类型: {partition.fstype}") print("-----") # 获取磁盘使用情况 try: usage = psutil.disk_usage(partition.mountpoint) print(f"总空间: {usage.total / (1024 ** 3):.2f} GB") print(f"已用空间: {usage.used / (1024 ** 3):.2f} GB") print(f"可用空间: {usage.free / (1024 ** 3):.2f} GB") print(f"使用率: {usage.percent}%") except PermissionError: # 有些分区可能没有权限访问 continue
示例5:监控磁盘IO
# 获取磁盘IO统计 disk_io = psutil.disk_io_counters() print(f"读取次数: {disk_io.read_count}") print(f"写入次数: {disk_io.write_count}") print(f"读取字节: {disk_io.read_bytes / (1024 ** 2):.2f} MB") print(f"写入字节: {disk_io.write_bytes / (1024 ** 2):.2f} MB") # 按磁盘分区获取IO统计 per_disk_io = psutil.disk_io_counters(perdisk=True) for disk_name, disk_stats in per_disk_io.items(): print(f"\n磁盘: {disk_name}") print(f" 读取次数: {disk_stats.read_count}") print(f" 写入次数: {disk_stats.write_count}")
网络信息与流量监控
psutil提供网络接口信息和流量统计:
示例6:获取网络接口信息
# 获取网络接口信息 net_if_addrs = psutil.net_if_addrs() for interface, addrs in net_if_addrs.items(): print(f"接口: {interface}") for addr in addrs: print(f" 地址族: {addr.family.name}") print(f" 地址: {addr.address}") print(f" 网络掩码: {addr.netmask}") print(f" 广播地址: {addr.broadcast}") print("-----")
示例7:监控网络流量
# 获取网络IO统计 net_io = psutil.net_io_counters() print(f"发送字节: {net_io.bytes_sent / (1024 ** 2):.2f} MB") print(f"接收字节: {net_io.bytes_recv / (1024 ** 2):.2f} MB") print(f"发送包数: {net_io.packets_sent}") print(f"接收包数: {net_io.packets_recv}") # 按网络接口获取IO统计 per_net_io = psutil.net_io_counters(pernic=True) for interface, stats in per_net_io.items(): print(f"\n接口: {interface}") print(f" 发送字节: {stats.bytes_sent / 1024:.2f} KB") print(f" 接收字节: {stats.bytes_recv / 1024:.2f} KB")
进程管理
psutil强大的进程管理功能:
示例8:列出所有进程
# 获取所有进程ID pids = psutil.pids() print(f"系统中共有 {len(pids)} 个进程") # 遍历所有进程 for pid in pids[:10]: # 只显示前10个进程 try: p = psutil.Process(pid) print(f"\n进程ID: {pid}") print(f"进程名称: {p.name()}") print(f"进程状态: {p.status()}") print(f"创建时间: {p.create_time()}") print(f"CPU使用率: {p.cpu_percent()}%") print(f"内存使用: {p.memory_info().rss / (1024 ** 2):.2f} MB") except psutil.NoSuchProcess: continue
示例9:终止进程
import psutil # 查找特定名称的进程 target_process_name = "notepad.exe" for proc in psutil.process_iter(['pid', 'name']): if proc.info['name'] == target_process_name: print(f"找到进程: {proc.info['pid']} - {proc.info['name']}") try: # 终止进程 proc.terminate() print(f"已终止进程 {proc.info['pid']}") except psutil.NoSuchProcess: print("进程已不存在") except psutil.AccessDenied: print("权限不足,无法终止进程")
其他实用功能
psutil还提供许多其他实用功能:
示例10:获取系统启动时间和登录用户
import psutil import datetime # 获取系统启动时间 boot_time = psutil.boot_time() print(f"系统启动时间: {datetime.datetime.fromtimestamp(boot_time).strftime('%Y-%m-%d %H:%M:%S')}") # 获取当前登录用户 users = psutil.users() for user in users: print(f"用户名: {user.name}") print(f"终端: {user.terminal}") print(f"登录时间: {datetime.datetime.fromtimestamp(user.started).strftime('%Y-%m-%d %H:%M:%S')}")
示例11:获取电池状态
# 获取电池信息(仅适用于笔记本电脑) if hasattr(psutil, "sensors_battery"): battery = psutil.sensors_battery() if battery: print(f"电量百分比: {battery.percent}%") print(f"电源连接状态: {'已连接' if battery.power_plugged else '未连接'}") if battery.secsleft < 0: print("电池状态: 正在充电") else: print(f"剩余时间: {battery.secsleft // 3600}小时 {(battery.secsleft % 3600) // 60}分钟") else: print("此系统没有电池信息")
实际应用:系统监控工具
结合以上功能,创建一个简单的系统监控工具:
示例12:实时系统监控
import psutil import time def monitor_system(interval=2): """实时监控系统资源使用情况""" try: while True: # 清屏 print("\033c", end="") # CPU使用率 cpu_percent = psutil.cpu_percent(interval=None) print(f"CPU使用率: {cpu_percent}%") # 内存使用 mem = psutil.virtual_memory() print(f"内存使用: {mem.percent}% ({mem.used / (1024 ** 3):.2f} GB / {mem.total / (1024 ** 3):.2f} GB)") # 磁盘使用 disk = psutil.disk_usage('/') print(f"根分区使用率: {disk.percent}%") # 网络流量 net_io = psutil.net_io_counters() print(f"网络发送: {net_io.bytes_sent / 1024:.2f} KB | 接收: {net_io.bytes_recv / 1024:.2f} KB") # 进程数量 print(f"运行中进程数: {len(psutil.pids())}") # 间隔时间 time.sleep(interval) except KeyboardInterrupt: print("\n监控已停止") # 启动监控 monitor_system()
总结
psutil是Python中用于系统监控和进程管理的强大工具,通过本教程,我们学习了:
- 如何安装和使用psutil模块
- 监控CPU、内存、磁盘和网络使用情况
- 管理系统进程(查找、终止进程)
- 获取系统信息(启动时间、登录用户等)
- 创建实时系统监控工具
psutil在系统监控、性能分析、资源管理等方面有广泛应用,是Python系统编程不可或缺的工具。
本文由QinTan于2025-08-01发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20257067.html
发表评论