(之前就想推荐这个库了,只不过一直咕咕咕)
psutil是一个全平台的,支持很多语言的进程管理库,它可以实现对系统磁盘,内存等情况的查询,还可以开启子进程+管理子进程
优点:比subprocess,os库的执行命令的函数来的成熟,匿名管道也非常好用
缺点:我觉得没有
本文章讲的是python3上面的psutil库,其他语言的可以直接github找一下文档
获取cpu信息:psutil.cpu_times()
获取cpu时:psutil.cpu_times().user
获取cpu逻辑个数:psutil.cpu_count()
获取CPU物理个数:psutil.cpu_count(logical=False)
获取CPU使用率:psutil.cpu_percent()#参数内表示保留几位小数,可不填
获取内存信息:psutil.virtual_memory()#virtual 意思是虚拟的,也就是说这是虚拟内存的信息
接下来讲进程
获取系统所有pid:psutil.pids()
可以用pid打开单个进程
(接下来直接复制百度就见得到的对单个进程的操作)
p = psutil.Process(16031)
p.name() #进程名
p.exe() #进程的bin路径
p.cwd() #进程的工作目录绝对路径
p.status() #进程状态
p.create_time() #进程创建时间
p.uids() #进程uid信息
p.gids() #进程的gid信息
p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
p.memory_percent() #进程内存利用率
p.memory_info() #进程内存rss,vms信息
p.io_counters() #进程的IO信息,包括读写IO数字及参数
p.connectios() #返回进程列表
p.num_threads() #进程开启的线程数
关于子进程:
匿名管道首先要用subprocess的一个PIPE
from subprocess import PIPE
p = psutil.Popen(['./test.exe'],stdin=PIPE,stdout=PIPE)#第一个参数里面的列表多加几个值就是多加几个参数,例如: echo 233就写成['echo','233']
p.name()
p.stdin.write(params)#这里面需要把str加密为byte
p.stdin.flush()#跟上面的stdin配对,输入写完就得写这条
p.stdout().read()#这里返回的byte也需要decode成str
p.wait()#这里会等待程序至执行完毕,并且会返回一个int值是这个子进程的返回值
p.memory_info().vms #这里会返回子进程的实际内存,其他内存可以自己根据memory_info()的返回值自行选择
psutil的优势在于跨平台和耐用,亲测在termux底下的python3.6可以完美运行