Python 三方模块 psutil
psutil(Python system and process utilities)是一个跨平台的 Python 库,用于获取系统和进程的信息。它可以监控 CPU、内存、磁盘、网络等系统资源的使用情况,以及管理系统进程。
pip install psutil
系统信息获取
CPU 信息
import psutil
# 获取 CPU 核心数
print(f"物理核心数: {psutil.cpu_count(logical=False)}")
print(f"逻辑核心数: {psutil.cpu_count(logical=True)}")
# 获取 CPU 使用率
print(f"总体 CPU 使用率: {psutil.cpu_percent(interval=1)}%")
# 获取每个核心的使用率
cpu_per_core = psutil.cpu_percent(interval=1, percpu=True)
for i, usage in enumerate(cpu_per_core):
print(f"核心 {i}: {usage}%")
内存信息
import psutil
# 获取内存信息
memory = psutil.virtual_memory()
print(f"总内存: {memory.total / (1024**3):.2f} GB")
print(f"已用内存: {memory.used / (1024**3):.2f} GB")
print(f"可用内存: {memory.available / (1024**3):.2f} GB")
print(f"内存使用率: {memory.percent}%")
# 获取交换内存信息
swap = psutil.swap_memory()
print(f"交换内存总量: {swap.total / (1024**3):.2f} GB")
print(f"交换内存使用率: {swap.percent}%")
磁盘信息
import psutil
# 获取磁盘分区信息
partitions = psutil.disk_partitions()
for partition in partitions:
print(f"设备: {partition.device}")
print(f"挂载点: {partition.mountpoint}")
print(f"文件系统: {partition.fstype}")
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.used / usage.total) * 100:.1f}%")
except PermissionError:
print(" 权限不足,无法访问")
print("-" * 40)
网络信息
import psutil
# 获取网络接口信息
net_io = psutil.net_io_counters(pernic=True)
for interface, stats in net_io.items():
print(f"网络接口: {interface}")
print(f" 发送字节数: {stats.bytes_sent / (1024**2):.2f} MB")
print(f" 接收字节数: {stats.bytes_recv / (1024**2):.2f} MB")
print(f" 发送包数: {stats.packets_sent}")
print(f" 接收包数: {stats.packets_recv}")
print("-" * 30)
# 获取网络连接信息
connections = psutil.net_connections()
print(f"当前网络连接数: {len(connections)}")
进程管理
获取进程列表
import psutil
# 获取所有进程
processes = []
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):
try:
processes.append(proc.info)
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass
# 按 CPU 使用率排序
processes.sort(key=lambda x: x['cpu_percent'], reverse=True)
print("CPU 使用率最高的 5 个进程:")
for proc in processes[:5]:
print(f"PID: {proc['pid']}, 名称: {proc['name']}, "
f"CPU: {proc['cpu_percent']:.1f}%, 内存: {proc['memory_percent']:.1f}%")
操作特定进程
import psutil
import os
# 获取当前进程
current_process = psutil.Process(os.getpid())
print(f"当前进程 PID: {current_process.pid}")
print(f"进程名称: {current_process.name()}")
print(f"创建时间: {current_process.create_time()}")
print(f"CPU 使用率: {current_process.cpu_percent()}%")
print(f"内存使用量: {current_process.memory_info().rss / (1024**2):.2f} MB")
# 获取进程的命令行参数
try:
cmdline = current_process.cmdline()
print(f"命令行: {' '.join(cmdline)}")
except psutil.AccessDenied:
print("无权限访问命令行信息")
# 获取进程状态
print(f"进程状态: {current_process.status()}")
查找和终止进程
import psutil
def find_process_by_name(name):
"""根据进程名查找进程"""
processes = []
for proc in psutil.process_iter(['pid', 'name']):
try:
if name.lower() in proc.info['name'].lower():
processes.append(proc)
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass
return processes
# 查找包含 "python" 的进程
python_processes = find_process_by_name("python")
print(f"找到 {len(python_processes)} 个 Python 进程:")
for proc in python_processes:
try:
print(f"PID: {proc.pid}, 名称: {proc.name()}")
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass
# 注意:实际终止进程需要谨慎操作,这里仅作演示
# proc.terminate() # 温和终止
# proc.kill() # 强制终止