一、简介
psutil是一个跨平台库,能够实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,性能分析和系统资源及进程的管理。
安装命令:pip install psutil
导入方式:import psutil
官方文档:
https://github.com/giampaolo/psutil
二、用法示例
1.CPU相关
# 获取CPU数量
print(psutil.cpu_count()) # 8
# CPU统计数据
print(psutil.cpu_stats()) # scpustats(ctx_switches=5579, interrupts=148976, soft_interrupts=1455634012, syscalls=65346)
# CPU使用率
print(psutil.cpu_percent(interval=1, percpu=True)) # [26.8, 25.8, 20.4, 17.3, 19.6, 11.2, 9.1, 5.0]
# 获取CPU完整信息
print(psutil.cpu_times()) # scputimes(user=789760.31, nice=0.0, system=770602.5, idle=11451189.04)
2.内存相关
为了便于将单位从bit转换为g,先定义一个bit_switch_g的函数
def bit_switch_g(total):
"""将单位从Bit转换为G"""
return round(total / 1024 / 1024 / 1024, 2)
mem = psutil.virtual_memory()
print(f"总内存: {bit_switch_g(mem.total)}G") # 总内存: 8.0G
print(f"可用内存: {bit_switch_g(mem.available)}G") # 可用内存: 1.19G
print(f"空闲内存: {bit_switch_g(mem.free)}G") # 空闲内存: 0.08G
print(f"已用内存占比: {mem.percent}%") # 已用内存占比: 86.9%
# 获取交换区内存
print(psutil.swap_memory()) # sswap(total=12884901888, used=12167741440, free=717160448, percent=94.4, sin=11638007857152, sout=76482134016)
3.磁盘相关
disk_usage = psutil.disk_usage("/Users")
print(disk_usage) # sdiskusage(total=245107195904, used=179994669056, free=35738259456, percent=83.4)
print(f"磁盘总空间:{bit_switch_g(disk_usage.total)}G") # 磁盘总空间:228.27G
print(f"磁盘已用空间:{bit_switch_g(disk_usage.used)}G") # 磁盘已用空间:167.57G
print(f"磁盘剩余空间:{bit_switch_g(disk_usage.free)}G") # 磁盘剩余空间:33.36G
print(f"磁盘已用空间占比:{disk_usage.percent}%") # 磁盘已用空间占比:83.4%
# 获取硬盘总的io数和读写信息,加上"perdisk=True"参数获取单个分区的io和读写信息
print(psutil.disk_io_counters(perdisk=True))
4.网络相关
print(psutil.net_io_counters()) # 获取网络总的IO情况
print(psutil.net_io_counters(pernic=True)) # 获取网卡的io情况
print(psutil.net_if_addrs()) # 获取网络接口信息
5.系统相关
# 获取开机时间,默认返回形式为时间戳
print(time.strftime("%Y-%m-%d,%H:%M:%S", time.localtime(psutil.boot_time()))) # 2024-07-08,09:53:04
# 遍历系统进程,打印进程名、进程号、进程状态
ps = psutil.pids()
for pid in ps:
pid_info = psutil.Process(pid)
name = pid_info.name()
pid_num = pid_info.pid
status = pid_info.status()
print(f"进程名称:{name},进程号{pid_num},进程状态{status}")
# 获取单个进程
p = psutil.Process(pid=97674)
print(f"进程名称:{p.name()},进程号{p.pid},进程状态{p.status()}") # 进程名称:Google Chrome Helper (Renderer),进程号97674,进程状态running