設計思路:
通過python,執行cmd中tasklist命令,獲取要統計的進程的相關信息;通過正則表達式,查找出進程名稱、進程pid、內存使用,然后打印出來。
作為pythoner,有時候需要統計python.exe進程所占用的內存,因此在設計時,通過pid,過濾掉統計內存這個腳本所啟用的內存的信息,只統計其他的python.exe的信息。
具體實現:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# coding:gbk
import os, re
import time
import string
#統計某一個進程名所占用的內存,同一個進程名,可能有多個進程
def countProcessMemoey(processName):
pattern = re.compile(r'([^\s]+)\s+(\d+)\s.*\s([^\s]+\sK)')
cmd = 'tasklist /fi "imagename eq ' + processName + '"' + ' | findstr.exe ' + processName
result = os.popen(cmd).read()
resultList = result.split("\n")
for srcLine in resultList:
srcLine = "".join(srcLine.split('\n'))
if len(srcLine) == 0:
break
m = pattern.search(srcLine)
if m == None:
continue
#由於是查看python進程所占內存,因此通過pid將本程序過濾掉
if str(os.getpid()) == m.group(2):
continue
ori_mem = m.group(3).replace(',','')
ori_mem = ori_mem.replace(' K','')
ori_mem = ori_mem.replace(r'\sK','')
memEach = string.atoi(ori_mem)
print 'ProcessName:'+ m.group(1) + '\tPID:' + m.group(2) + '\tmemory size:%.2f'% (memEach * 1.0 /1024), 'M'
print "*" * 58
if __name__ == '__main__':
#進程名
ProcessName = 'python.exe'
ProcessName2 = "chrome.exe"
while True:
countProcessMemoey(ProcessName)
countProcessMemoey(ProcessName2)
time.sleep(5)
運行結果:

