您好,登录后才能下订单哦!
在现代软件开发中,系统监控和管理是一个非常重要的环节。无论是服务器运维、性能调优,还是开发调试,获取系统的硬件、网络和进程信息都是必不可少的。Python作为一种功能强大且易于使用的编程语言,提供了丰富的库来帮助我们实现这些功能。其中,psutil
库是一个非常优秀的工具,它能够轻松地获取系统的硬件信息、网络状态和进程信息。
本文将详细介绍如何使用psutil
库来获取系统的硬件、网络和进程信息,并通过实际案例展示其强大的功能。
psutil
(process and system utilities)是一个跨平台的Python库,用于检索系统运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。它支持多种操作系统,包括Linux、Windows、macOS、FreeBSD、OpenBSD、NetBSD、Sun Solaris等。
psutil
的主要特点包括:
- 跨平台支持
- 简单易用的API
- 高效且轻量级
- 支持Python 2.7和Python 3.4+
在开始使用psutil
之前,首先需要安装它。可以通过pip
命令来安装:
pip install psutil
安装完成后,可以通过以下代码来验证是否安装成功:
import psutil
print(psutil.__version__)
如果输出了psutil
的版本号,说明安装成功。
psutil
提供了多种方法来获取CPU的相关信息,包括CPU的使用率、核心数、频率等。
import psutil
# 获取CPU的使用率(百分比)
cpu_usage = psutil.cpu_percent(interval=1)
print(f"CPU使用率: {cpu_usage}%")
cpu_percent()
方法可以获取CPU的使用率。interval
参数表示采样的时间间隔,单位为秒。
# 获取CPU的逻辑核心数
cpu_count = psutil.cpu_count(logical=True)
print(f"CPU逻辑核心数: {cpu_count}")
# 获取CPU的物理核心数
cpu_count_physical = psutil.cpu_count(logical=False)
print(f"CPU物理核心数: {cpu_count_physical}")
cpu_count()
方法可以获取CPU的核心数。logical=True
表示获取逻辑核心数,logical=False
表示获取物理核心数。
# 获取CPU的当前频率
cpu_freq = psutil.cpu_freq()
print(f"CPU当前频率: {cpu_freq.current} MHz")
print(f"CPU最小频率: {cpu_freq.min} MHz")
print(f"CPU最大频率: {cpu_freq.max} MHz")
cpu_freq()
方法可以获取CPU的当前频率、最小频率和最大频率。
psutil
提供了多种方法来获取内存的相关信息,包括物理内存、交换内存等。
# 获取物理内存信息
mem_info = psutil.virtual_memory()
print(f"总内存: {mem_info.total / 1024 / 1024:.2f} MB")
print(f"可用内存: {mem_info.available / 1024 / 1024:.2f} MB")
print(f"已使用内存: {mem_info.used / 1024 / 1024:.2f} MB")
print(f"内存使用率: {mem_info.percent}%")
virtual_memory()
方法可以获取物理内存的总量、可用量、已使用量和内存使用率。
# 获取交换内存信息
swap_info = psutil.swap_memory()
print(f"总交换内存: {swap_info.total / 1024 / 1024:.2f} MB")
print(f"已使用交换内存: {swap_info.used / 1024 / 1024:.2f} MB")
print(f"交换内存使用率: {swap_info.percent}%")
swap_memory()
方法可以获取交换内存的总量、已使用量和交换内存使用率。
psutil
提供了多种方法来获取磁盘的相关信息,包括磁盘分区、磁盘使用率、磁盘IO等。
# 获取磁盘分区信息
disk_partitions = psutil.disk_partitions()
for partition in disk_partitions:
print(f"设备: {partition.device}")
print(f"挂载点: {partition.mountpoint}")
print(f"文件系统类型: {partition.fstype}")
print(f"挂载选项: {partition.opts}")
print()
disk_partitions()
方法可以获取系统中所有的磁盘分区信息,包括设备名称、挂载点、文件系统类型和挂载选项。
# 获取磁盘使用率
disk_usage = psutil.disk_usage('/')
print(f"总空间: {disk_usage.total / 1024 / 1024 / 1024:.2f} GB")
print(f"已使用空间: {disk_usage.used / 1024 / 1024 / 1024:.2f} GB")
print(f"可用空间: {disk_usage.free / 1024 / 1024 / 1024:.2f} GB")
print(f"磁盘使用率: {disk_usage.percent}%")
disk_usage()
方法可以获取指定路径的磁盘使用情况,包括总空间、已使用空间、可用空间和磁盘使用率。
# 获取磁盘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 / 1024:.2f} MB")
print(f"写入字节数: {disk_io.write_bytes / 1024 / 1024:.2f} MB")
disk_io_counters()
方法可以获取磁盘的IO信息,包括读取次数、写入次数、读取字节数和写入字节数。
psutil
还提供了获取传感器信息的功能,包括温度、风扇转速等。
# 获取温度信息
temps = psutil.sensors_temperatures()
for name, entries in temps.items():
print(f"传感器: {name}")
for entry in entries:
print(f" {entry.label}: {entry.current}°C")
sensors_temperatures()
方法可以获取系统中所有温度传感器的信息。
# 获取风扇转速信息
fans = psutil.sensors_fans()
for name, entries in fans.items():
print(f"风扇: {name}")
for entry in entries:
print(f" {entry.label}: {entry.current} RPM")
sensors_fans()
方法可以获取系统中所有风扇的转速信息。
psutil
提供了多种方法来获取网络接口的相关信息,包括IP地址、MAC地址、网络接口状态等。
# 获取网络接口信息
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}")
print(f" 地址: {address.address}")
print(f" 网络掩码: {address.netmask}")
print(f" 广播地址: {address.broadcast}")
print(f" P2P地址: {address.ptp}")
print()
net_if_addrs()
方法可以获取系统中所有网络接口的地址信息,包括IP地址、MAC地址、网络掩码、广播地址和P2P地址。
# 获取网络接口状态
net_if_stats = psutil.net_if_stats()
for interface_name, stats in net_if_stats.items():
print(f"接口: {interface_name}")
print(f" 是否启用: {stats.isup}")
print(f" 双工模式: {stats.duplex}")
print(f" 速度: {stats.speed} Mbps")
print(f" MTU: {stats.mtu}")
print()
net_if_stats()
方法可以获取系统中所有网络接口的状态信息,包括是否启用、双工模式、速度和MTU。
psutil
提供了多种方法来获取网络连接的相关信息,包括TCP连接、UDP连接等。
# 获取TCP连接信息
tcp_connections = psutil.net_connections(kind='tcp')
for conn in tcp_connections:
print(f"协议: {conn.type}")
print(f"本地地址: {conn.laddr}")
print(f"远程地址: {conn.raddr}")
print(f"状态: {conn.status}")
print(f"进程ID: {conn.pid}")
print()
net_connections()
方法可以获取系统中所有的TCP连接信息,包括协议、本地地址、远程地址、状态和进程ID。
# 获取UDP连接信息
udp_connections = psutil.net_connections(kind='udp')
for conn in udp_connections:
print(f"协议: {conn.type}")
print(f"本地地址: {conn.laddr}")
print(f"远程地址: {conn.raddr}")
print(f"状态: {conn.status}")
print(f"进程ID: {conn.pid}")
print()
net_connections()
方法也可以获取系统中所有的UDP连接信息。
psutil
提供了多种方法来获取网络流量的统计信息,包括发送和接收的字节数、数据包数等。
# 获取网络流量统计信息
net_io_counters = psutil.net_io_counters()
print(f"发送字节数: {net_io_counters.bytes_sent / 1024 / 1024:.2f} MB")
print(f"接收字节数: {net_io_counters.bytes_recv / 1024 / 1024:.2f} MB")
print(f"发送数据包数: {net_io_counters.packets_sent}")
print(f"接收数据包数: {net_io_counters.packets_recv}")
net_io_counters()
方法可以获取系统中所有网络接口的流量统计信息,包括发送和接收的字节数、数据包数等。
psutil
提供了多种方法来列出系统中所有的进程。
# 列出所有进程ID
pids = psutil.pids()
for pid in pids:
print(f"进程ID: {pid}")
pids()
方法可以获取系统中所有进程的ID。
# 列出所有进程对象
processes = psutil.process_iter()
for proc in processes:
print(f"进程ID: {proc.pid}")
print(f"进程名称: {proc.name()}")
print(f"进程状态: {proc.status()}")
print()
process_iter()
方法可以获取系统中所有进程的对象,通过进程对象可以获取更多的进程信息。
psutil
提供了多种方法来获取进程的详细信息,包括进程名称、状态、CPU使用率、内存使用率等。
# 获取进程名称
proc = psutil.Process(pid=1)
print(f"进程名称: {proc.name()}")
Process()
方法可以获取指定进程ID的进程对象,通过进程对象的name()
方法可以获取进程名称。
# 获取进程状态
proc = psutil.Process(pid=1)
print(f"进程状态: {proc.status()}")
status()
方法可以获取进程的状态,包括运行中、睡眠中、停止等。
# 获取进程CPU使用率
proc = psutil.Process(pid=1)
cpu_usage = proc.cpu_percent(interval=1)
print(f"进程CPU使用率: {cpu_usage}%")
cpu_percent()
方法可以获取进程的CPU使用率。
# 获取进程内存使用率
proc = psutil.Process(pid=1)
mem_info = proc.memory_info()
print(f"进程内存使用量: {mem_info.rss / 1024 / 1024:.2f} MB")
memory_info()
方法可以获取进程的内存使用量,rss
表示常驻内存集大小。
psutil
还提供了进程管理的功能,包括终止进程、挂起进程、恢复进程等。
# 终止进程
proc = psutil.Process(pid=1)
proc.terminate()
terminate()
方法可以终止指定进程。
# 挂起进程
proc = psutil.Process(pid=1)
proc.suspend()
suspend()
方法可以挂起指定进程。
# 恢复进程
proc = psutil.Process(pid=1)
proc.resume()
resume()
方法可以恢复指定进程。
psutil
可以结合Python的定时任务库(如time
、schedule
等)来实现定时监控系统的硬件、网络和进程信息。
import time
import psutil
def monitor_cpu():
cpu_usage = psutil.cpu_percent(interval=1)
print(f"CPU使用率: {cpu_usage}%")
while True:
monitor_cpu()
time.sleep(5)
上述代码每隔5秒监控一次CPU的使用率。
psutil
是一个跨平台的库,可以在多种操作系统上使用。在使用时需要注意不同操作系统之间的差异。
import psutil
if psutil.LINUX:
print("当前系统是Linux")
elif psutil.WINDOWS:
print("当前系统是Windows")
elif psutil.MACOS:
print("当前系统是macOS")
psutil
提供了LINUX
、WINDOWS
、MACOS
等常量来判断当前操作系统。
在使用psutil
时,如果频繁获取系统信息,可能会影响系统性能。可以通过以下方法进行优化:
import psutil
import time
# 缓存CPU使用率
cpu_usage_cache = None
def get_cpu_usage():
global cpu_usage_cache
if cpu_usage_cache is None:
cpu_usage_cache = psutil.cpu_percent(interval=1)
return cpu_usage_cache
while True:
print(f"CPU使用率: {get_cpu_usage()}%")
time.sleep(5)
上述代码通过缓存机制减少了获取CPU使用率的次数。
psutil
可以用来开发系统监控工具,实时监控系统的硬件、网络和进程信息。
import psutil
import time
def monitor_system():
# 监控CPU使用率
cpu_usage = psutil.cpu_percent(interval=1)
print(f"CPU使用率: {cpu_usage}%")
# 监控内存使用率
mem_info = psutil.virtual_memory()
print(f"内存使用率: {mem_info.percent}%")
# 监控磁盘使用率
disk_usage = psutil.disk_usage('/')
print(f"磁盘使用率: {disk_usage.percent}%")
# 监控网络流量
net_io = psutil.net_io_counters()
print(f"发送字节数: {net_io.bytes_sent / 1024 / 1024:.2f} MB")
print(f"接收字节数: {net_io.bytes_recv / 1024 / 1024:.2f} MB")
while True:
monitor_system()
time.sleep(5)
上述代码实现了一个简单的系统监控工具,每隔5秒监控一次系统的CPU、内存、磁盘和网络信息。
psutil
可以用来分析网络流量,帮助识别网络瓶颈和异常流量。
”`python import psutil import time
def monitor_network(): net_io = psutil.net_io_counters() print(f”发送字节数: {net_io.bytes_sent / 1024 / 1024:.2f} MB”) print(f”接收字节数: {net_io.bytes_recv / 1024 / 1024:.2f} MB”)
while True:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。