Python轮子:运维神器~psutil

原文链接: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()等方法获取网络接口信息。

 

 

扩展阅读:

  1.  

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注