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