原文链接:http://www.juzicode.com/python-module-psutil
在Python中可以通过psutil模块获取系统信息,获取cpu,硬盘,内存,网口等状态,实现系统监控,是运维小伙伴的一大神器。
安装和导入
使用pip安装:
pip install psutil
使用import导入:
import psutil
获取cpu核的数量
#juzicode.com/VX公众号:juzicode
import psutil
count = psutil.cpu_count(logical=True) # CPU逻辑数量
print('cpu_count:', count)
count = psutil.cpu_count(logical=False) # CPU物理数量
print('cpu_count:', count)
运行结果:
cpu_count: 4
cpu_count: 4
获取cpu使用时间
返回的结果可以使用迭代方式或者下标方式区分用户,系统,idle等时间:
#juzicode.com/VX公众号:juzicode
import psutil
ret = psutil.cpu_times() #
print('cpu_times:', ret)
for r in ret: # 迭代访问
print(r)
print('user:', ret[0]) #下标访问
print('system:', ret[1])
print('idle:', ret[2])
print('interrupt:', ret[2])
print('dpc:', ret[2])
运行结果:
cpu_times: scputimes(user=383199.828125, system=575005.5937499995, idle=2705731.625, interrupt=25404.078125, dpc=19083.953125)
383199.828125
575005.5937499995
2705731.625
25404.078125
19083.953125
user: 383199.828125
system: 575005.5937499995
idle: 2705731.625
interrupt: 2705731.625
dpc: 2705731.625
cpu_percent: [11.9, 56.9, 59.1, 15.4]
获取cpu使用率
cpu_percent()方法返回每个核的利用率,比如下面的例子中有4个核,则返回一个包含4个元素的列表:
#juzicode.com/VX公众号:juzicode
import psutil
count = psutil.cpu_count(logical=True) # CPU逻辑数量
print('cpu_count:', count)
ret = psutil.cpu_percent(interval=1, percpu=True)
print('cpu_percent:', ret)
运行结果:
cpu_count: 4
cpu_percent: [12.3, 69.7, 56.1, 12.3]
获取磁盘分区信息
disk_partitions()返回结果是一个包含各个分区信息的列表,列表中再包含了分区名称,文件系统等信息:
#juzicode.com/VX公众号:juzicode
import psutil
ret = psutil.disk_partitions() # 磁盘分区
print('disk_partitions:', ret) # 返回结果是一个包含各个分区的列表
for r in ret:
print('device:',r[0]) # 下标获取
print('mountpoint:',r[1])
print('fstype:',r[2])
运行结果:
disk_partitions: [sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260)]
device: C:\
mountpoint: C:\
fstype: NTFS
device: D:\
mountpoint: D:\
fstype: NTFS
获取磁盘利用率
#juzicode.com/VX公众号:juzicode
import psutil
ret = psutil.disk_usage('C:\\') # 磁盘使用率
print('C disk_usage:', ret)
ret = psutil.disk_usage('D:\\') # 磁盘使用率
print('D disk_usage:', ret)
print('total:',ret[0]) # 下标获取
print('used:',ret[1])
print('free:',ret[2])
print('percent:',ret[3])
运行结果:
C disk_usage: sdiskusage(total=382952136704, used=195978416128, free=186973720576, percent=51.2)
D disk_usage: sdiskusage(total=616183099392, used=468294279168, free=147888820224, percent=76.0)
total: 616183099392
used: 468294279168
free: 147888820224
percent: 76.0
获取进程信息
下面的例子获取所有的进程id,通过进程id找到python相关的进程,并打印出进程名称,父进程id,exe路径,进程使用的cpu时间,线程数等等:
#juzicode.com/VX公众号:juzicode
import psutil
ret = psutil.pids() # 所有进程ID
# print('pids:', ret)
for r in ret:
p = psutil.Process(r)
if p.name().lower() == 'python.exe':
print('pid:', r)
print('p.name():', p.name())
print('p.ppid():', p.ppid())
print('p.exe():', p.exe())
print('p.ppid():', p.ppid())
print('p.status():', p.status())
print('p.num_threads():', p.num_threads())
print('p.cpu_times():', p.cpu_times())
运行结果:
pid: 21068
p.name(): python.exe
p.ppid(): 15056
p.exe(): D:\Python\Python310\python.exe
p.ppid(): 15056
p.status(): running
p.num_threads(): 12
p.cpu_times(): pcputimes(user=10.125, system=21.984375, children_user=0.0, children_system=0.0)
pid: 44316
p.name(): python.exe
p.ppid(): 13524
p.exe(): D:\Python\Python310\python.exe
p.ppid(): 13524
p.status(): running
p.num_threads(): 4
p.cpu_times(): pcputimes(user=0.203125, system=1.625, children_user=0.0, children_system=0.0)
获取内存信息
#juzicode.com/VX公众号:juzicode
import psutil
ret = psutil.virtual_memory()
print('virtual_memory:', ret)
ret = psutil.swap_memory()
print('swap_memory:', ret)
运行结果:
virtual_memory: svmem(total=8464674816, available=1657978880, percent=80.4, used=6806695936, free=1657978880)
swap_memory: sswap(total=25594368000, used=5761503232, free=19832864768, percent=22.5, sin=0, sout=0)
除了前面介绍的各种获取cpu,硬盘,内存信息,还可以使用net_io_counters(),net_if_addrs(),net_if_stats(),net_connections()等方法获取网络接口信息。