Python Cheat Sheet系统监控:psutil系统信息获取

Python Cheat Sheet系统监控:psutil系统信息获取

【免费下载链接】pysheeet Python Cheat Sheet 【免费下载链接】pysheeet 项目地址: 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 【免费下载链接】pysheeet 项目地址: https://gitcode.com/gh_mirrors/py/pysheeet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值