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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM