Python Cheat Sheet系统监控:psutil系统信息获取
【免费下载链接】pysheeet Python Cheat Sheet 项目地址: https://gitcode.com/gh_mirrors/py/pysheeet
你是否还在为如何快速获取系统运行状态而烦恼?是否需要一个简单易用的工具来监控CPU、内存、磁盘和网络使用情况?本文将介绍如何使用psutil库轻松实现系统信息的获取与监控,让你一文掌握系统监控的核心技巧。读完本文,你将能够:获取CPU使用率、监控内存占用、查看磁盘空间、跟踪网络连接,并将这些信息整合到自己的Python应用中。
为什么选择psutil
在Python中,获取系统信息的传统方法是使用os模块。例如,通过os.cpu_count()可以获取CPU核心数,如docs/notes/os/python-os.rst中所示:
>>> import os
>>> os.cpu_count()
然而,os模块提供的功能较为基础,对于复杂的系统监控需求显得力不从心。psutil(process and system utilities)是一个跨平台的Python库,它提供了丰富的接口来获取系统信息和进程管理,支持Windows、Linux、macOS等多种操作系统。使用psutil,你可以轻松获取CPU、内存、磁盘、网络等系统资源的详细信息,而无需编写复杂的系统调用代码。
安装psutil
在开始使用psutil之前,需要先安装该库。你可以使用pip命令进行安装:
pip install psutil
CPU信息获取
获取CPU核心数
使用psutil.cpu_count()可以获取CPU的物理核心数和逻辑核心数。物理核心数指的是CPU实际的核心数量,逻辑核心数则是考虑了超线程技术后的核心数量。
import psutil
# 获取物理核心数
physical_cores = psutil.cpu_count(logical=False)
# 获取逻辑核心数
logical_cores = psutil.cpu_count(logical=True)
print(f"物理核心数: {physical_cores}")
print(f"逻辑核心数: {logical_cores}")
获取CPU使用率
psutil.cpu_percent()方法可以获取CPU的使用率,该方法有一个interval参数,表示采样时间间隔(秒),percpu参数表示是否获取每个CPU核心的使用率。
import psutil
import time
# 获取整体CPU使用率(采样时间1秒)
cpu_percent = psutil.cpu_percent(interval=1)
print(f"整体CPU使用率: {cpu_percent}%")
# 获取每个CPU核心的使用率
percpu_percent = psutil.cpu_percent(interval=1, percpu=True)
for i, percent in enumerate(percpu_percent):
print(f"CPU核心{i}使用率: {percent}%")
CPU频率信息
使用psutil.cpu_freq()可以获取CPU的频率信息,包括当前频率、最小频率和最大频率。
import psutil
cpu_freq = psutil.cpu_freq()
print(f"当前CPU频率: {cpu_freq.current:.2f}MHz")
print(f"最小CPU频率: {cpu_freq.min:.2f}MHz")
print(f"最大CPU频率: {cpu_freq.max:.2f}MHz")
内存信息获取
虚拟内存信息
psutil.virtual_memory()方法可以获取系统的虚拟内存信息,包括总内存、可用内存、已使用内存、内存使用率等。
import psutil
virtual_memory = psutil.virtual_memory()
print(f"总内存: {virtual_memory.total / (1024 **3):.2f}GB")
print(f"可用内存: {virtual_memory.available / (1024** 3):.2f}GB")
print(f"已使用内存: {virtual_memory.used / (1024 **3):.2f}GB")
print(f"内存使用率: {virtual_memory.percent}%")
交换内存信息
交换内存(Swap)是当物理内存不足时,系统将部分硬盘空间模拟为内存使用。psutil.swap_memory()方法可以获取交换内存的信息。
import psutil
swap_memory = psutil.swap_memory()
print(f"总交换内存: {swap_memory.total / (1024 **3):.2f}GB")
print(f"可用交换内存: {swap_memory.free / (1024** 3):.2f}GB")
print(f"已使用交换内存: {swap_memory.used / (1024 **3):.2f}GB")
print(f"交换内存使用率: {swap_memory.percent}%")
磁盘信息获取
磁盘分区信息
psutil.disk_partitions()方法可以获取系统的磁盘分区信息,包括设备名称、挂载点、文件系统类型等。
import psutil
disk_partitions = psutil.disk_partitions()
for partition in disk_partitions:
print(f"设备: {partition.device}")
print(f"挂载点: {partition.mountpoint}")
print(f"文件系统类型: {partition.fstype}")
print("-" * 50)
磁盘使用率
psutil.disk_usage()方法可以获取指定挂载点的磁盘使用率,需要传入挂载点路径作为参数。
import psutil
# 获取根目录的磁盘使用率
root_usage = psutil.disk_usage('/')
print(f"总磁盘空间: {root_usage.total / (1024 **3):.2f}GB")
print(f"已使用磁盘空间: {root_usage.used / (1024** 3):.2f}GB")
print(f"可用磁盘空间: {root_usage.free / (1024 **3):.2f}GB")
print(f"磁盘使用率: {root_usage.percent}%")
磁盘IO信息
psutil.disk_io_counters()方法可以获取磁盘的IO信息,包括读取次数、写入次数、读取字节数、写入字节数等。perdisk参数表示是否获取每个磁盘的IO信息。
import psutil
# 获取整体磁盘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信息
perdisk_io = psutil.disk_io_counters(perdisk=True)
for disk, io in perdisk_io.items():
print(f"磁盘{disk}:")
print(f" 读取次数: {io.read_count}")
print(f" 写入次数: {io.write_count}")
print(f" 读取字节数: {io.read_bytes / (1024** 2):.2f}MB")
print(f" 写入字节数: {io.write_bytes / (1024 **2):.2f}MB")
网络信息获取
网络接口信息
psutil.net_if_addrs()方法可以获取网络接口的信息,包括IP地址、MAC地址、子网掩码等。
import psutil
net_if_addrs = psutil.net_if_addrs()
for interface_name, interface_addresses in net_if_addrs.items():
print(f"网络接口: {interface_name}")
for address in interface_addresses:
print(f" 地址类型: {address.family.name}")
print(f" IP地址: {address.address}")
print(f" 子网掩码: {address.netmask}")
print(f" 广播地址: {address.broadcast}")
print("-" * 50)
网络IO信息
psutil.net_io_counters()方法可以获取网络的IO信息,包括发送字节数、接收字节数、发送包数、接收包数等。pernic参数表示是否获取每个网络接口的IO信息。
import psutil
# 获取整体网络IO信息
net_io = psutil.net_io_counters()
print(f"接收字节数: {net_io.bytes_recv / (1024** 2):.2f}MB")
print(f"发送字节数: {net_io.bytes_sent / (1024 **2):.2f}MB")
print(f"接收包数: {net_io.packets_recv}")
print(f"发送包数: {net_io.packets_sent}")
# 获取每个网络接口的IO信息
pernic_io = psutil.net_io_counters(pernic=True)
for interface, io in pernic_io.items():
print(f"网络接口{interface}:")
print(f" 接收字节数: {io.bytes_recv / (1024** 2):.2f}MB")
print(f" 发送字节数: {io.bytes_sent / (1024 **2):.2f}MB")
print(f" 接收包数: {io.packets_recv}")
print(f" 发送包数: {io.packets_sent}")
网络连接信息
psutil.net_connections()方法可以获取当前系统的网络连接信息,包括本地地址、远程地址、连接状态等。需要注意的是,在Windows系统上需要以管理员权限运行才能获取所有连接信息。
import psutil
# 获取所有网络连接信息
net_connections = psutil.net_connections()
for conn in net_connections:
print(f"本地地址: {conn.laddr}")
print(f"远程地址: {conn.raddr}")
print(f"连接状态: {conn.status}")
print(f"进程ID: {conn.pid}")
print("-" * 50)
进程信息获取
获取所有进程
psutil.process_iter()方法可以获取当前系统的所有进程,返回一个迭代器,每个元素是一个Process对象,通过该对象可以获取进程的详细信息。
import psutil
# 获取所有进程的PID和名称
for process in psutil.process_iter(['pid', 'name']):
print(f"PID: {process.info['pid']}, 进程名称: {process.info['name']}")
获取指定进程信息
通过psutil.Process(pid)可以获取指定PID的进程信息,例如获取进程名称、路径、CPU使用率、内存使用率等。
import psutil
# 获取当前Python进程的信息
current_pid = psutil.Process().pid
process = psutil.Process(current_pid)
print(f"进程名称: {process.name()}")
print(f"进程路径: {process.exe()}")
print(f"进程PID: {process.pid}")
print(f"进程PPID: {process.ppid()}")
print(f"CPU使用率: {process.cpu_percent(interval=1)}%")
print(f"内存使用率: {process.memory_percent()}%")
print(f"进程状态: {process.status()}")
系统监控实战案例
下面是一个简单的系统监控脚本,它可以实时显示CPU使用率、内存使用率、磁盘使用率和网络IO信息,并将监控数据输出到控制台。
import psutil
import time
def monitor_system(interval=1):
while True:
# 清屏
print("\033c", end="")
# CPU信息
cpu_percent = psutil.cpu_percent(interval=interval, percpu=True)
print("CPU使用率:")
for i, percent in enumerate(cpu_percent):
print(f" 核心{i}: {percent}%", end=" ")
print("\n")
# 内存信息
virtual_memory = psutil.virtual_memory()
print("内存信息:")
print(f" 总内存: {virtual_memory.total / (1024 **3):.2f}GB")
print(f" 已使用内存: {virtual_memory.used / (1024** 3):.2f}GB")
print(f" 可用内存: {virtual_memory.available / (1024 **3):.2f}GB")
print(f" 内存使用率: {virtual_memory.percent}%")
print("\n")
# 磁盘信息(根目录)
root_usage = psutil.disk_usage('/')
print("磁盘信息(根目录):")
print(f" 总磁盘空间: {root_usage.total / (1024** 3):.2f}GB")
print(f" 已使用磁盘空间: {root_usage.used / (1024 **3):.2f}GB")
print(f" 可用磁盘空间: {root_usage.free / (1024** 3):.2f}GB")
print(f" 磁盘使用率: {root_usage.percent}%")
print("\n")
# 网络IO信息
net_io = psutil.net_io_counters()
print("网络IO信息:")
print(f" 接收字节数: {net_io.bytes_recv / (1024 **2):.2f}MB")
print(f" 发送字节数: {net_io.bytes_sent / (1024** 2):.2f}MB")
print(f" 接收包数: {net_io.packets_recv}")
print(f" 发送包数: {net_io.packets_sent}")
# 等待下一个采样周期
time.sleep(interval)
if __name__ == "__main__":
try:
monitor_system(interval=2)
except KeyboardInterrupt:
print("监控结束")
运行上述脚本后,你将看到类似以下的输出,实时显示系统的各项资源使用情况:
CPU使用率:
核心0: 10.0% 核心1: 5.0% 核心2: 8.0% 核心3: 3.0%
内存信息:
总内存: 16.00GB
已使用内存: 8.50GB
可用内存: 7.50GB
内存使用率: 53.1%
磁盘信息(根目录):
总磁盘空间: 500.00GB
已使用磁盘空间: 200.00GB
可用磁盘空间: 300.00GB
磁盘使用率: 40.0%
网络IO信息:
接收字节数: 1024.00MB
发送字节数: 512.00MB
接收包数: 10000
发送包数: 5000
总结
本文介绍了如何使用psutil库获取系统的CPU、内存、磁盘、网络和进程等信息,并通过一个实战案例展示了如何实时监控系统资源。psutil库提供了丰富的接口和跨平台支持,是Python系统监控和进程管理的得力工具。通过本文的学习,你可以轻松地将psutil应用到自己的项目中,实现系统信息的获取和监控。
如果你想了解更多关于psutil的详细信息,可以参考psutil官方文档。同时,你也可以查看项目中的相关文档,如docs/notes/os/python-os.rst,获取更多关于Python系统编程的知识。
希望本文对你有所帮助,如果你有任何问题或建议,欢迎留言交流。
【免费下载链接】pysheeet Python Cheat Sheet 项目地址: https://gitcode.com/gh_mirrors/py/pysheeet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



