Skip to main content

Python 常用三方模块

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()       # 强制终止