上一篇
Python psutil模块使用教程 - 系统监控与进程管理 | Python系统编程指南
- Python
- 2025-08-01
- 1211
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发表在吾爱品聚,如有疑问,请联系我们。
本文链接:http://521pj.cn/20257067.html
发表评论