psutil的几个例子

python进行系统相关操作时都有点力不从心,尤其是windows下,比如获取进程的cpu、内存等等,可以通过以下方法可以达到这种要求:

1、安装pywin32、psutil这种第三方库,里面提供了很多相关的api

2、用c++写,编译成dll,把相关api导出,让python去调用

3、通过ctypes去调用windows api实现

psutil是跨平台的,不过功能比较弱,举几个例子

##根据进程名获取PID
def nametopid(x):
    num=[]
    for r in psutil.process_iter():
        aa = str(r)
        f = re.compile(x,re.I)
        if f.search(aa):
            num.append( aa.split('pid=')[1].split(',')[0] )
    return num
print nametopid('chrome')

##根据进程名获取进程全路径
def nametopath(x):
    num=[]
    for i in nametopid(x):
        num.append(psutil.Process(int(i)).exe())
    return num
print nametopath('notepad')

##根据PID获取进程名
def pidtoname(x):
    return psutil.Process(int(x)).name()
# print pidtoname('sasa')

##根据PID获取进程全路径
def pidtopath(x):
    return psutil.Process(int(x)).exe()
# print pidtopath('1280')

##杀进程
def killprocess(x):
    if x.isdigit():
        psutil.Process(int(x)).terminate()
    else:
        for i in nametopid(x):
            psutil.Process(int(i)).terminate()
# killprocess('notepad')
# killprocess('1111')

##杀进程树
def killprocesstree(x):
    if x.isdigit():#根据pid杀
        for pid in psutil.pids():
            if psutil.Process(int(pid)).ppid()==int(x):                 
                psutil.Process(int(pid)).terminate() 
        psutil.Process(int(x)).terminate()
    else:#根据进程名杀
        try: 
            for pid in psutil.pids():#杀子进程
                if str(psutil.Process(int(pid)).ppid()) in nametopid(x): #if 'a' in theList:
                    psutil.Process(int(pid)).terminate() 
            for i in nametopid(x):#杀父进程
                psutil.Process(int(i)).terminate()
        except Exception,info:
            return "input the right pname!"
# killprocesstree('procexp.exe')

##获取进程内存占用 , psutil does not expose the private working set
def getprocessmem(x):
    if x.isdigit():
        return psutil.Process(int(x)).memory_info()
    else:
        for i in nametopid(x):
            return psutil.Process(int(i)).memory_info()
# print getprocessmem('236')


##获取进程CPU占用
def getprocesscpu(x):
    if x.isdigit():
        return psutil.Process(int(x)).cpu_percent(interval=1.0) / psutil.cpu_count()
    else:
        num=[]
        for i in nametopid(x):
            num.append(psutil.Process(int(i)).cpu_percent(interval=1.0) / psutil.cpu_count() )
        return num

  

转载于:https://www.cnblogs.com/idbeta/p/5262093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值