本例主要功能:每隔3秒获取系统内存,当内存超过设定的警报值时,获取所有进程占用内存并发出警报声。内存值和所有进程占用内存记入log,log文件按天命名。
1 获取cpu、内存、进程信息
利用WMI
简单说明下,WMI的全称是Windows Management Instrumentation,即Windows管理规范。它是Windows操作系统上管理数据和操作的基础设施。我们可以使用WMI脚本或者应用自动化管理任务等。
安装模块
WMI下载地址:https://pypi.python.org/pypi/WMI/#downloads
win32com下载地址:
学会使用WMI
不错的教程: http://python.jobbole.com/86349/
获取cpu、内存、磁盘
def getSysInfo(wmiService = None):
result = {}
if wmiService == None:
wmiService = wmi.WMI()
# cpu
for cpu in wmiService.Win32_Processor():
timestamp = time.strftime('%a, %d %b %Y %H:%M:%S', time.localtime())
result['cpuPercent'] = cpu.loadPercentage
# memory
cs = wmiService.Win32_ComputerSystem()
os = wmiService.Win32_OperatingSystem()
result['memTotal'] = int(int(cs[0].TotalPhysicalMemory)/1024/1024)
result['memFree'] = int(int(os[0].FreePhysicalMemory)/1024)
result['memPercent']=result['memFree'] * 100 /result['memTotal']
#disk
result['diskTotal'] = 0
result['diskFree'] = 0
for disk in wmiService.Win32_LogicalDisk(DriveType=3):
result['diskTotal'] += int(disk.Size)
result['diskFree'] += int(disk.FreeSpace)
result['diskTotal'] = int(result['diskTotal']/1024/1024)
result['diskFree'] = int(result['diskFree']/1024/1024)
return result
获取所有进程占用内存
def getAllProcessInfo(mywmi = None):
"""取出全部进程的进程名,进程ID,进程实际内存, 虚拟内存,CPU使用率
"""
allProcessList = []
allProcess = mywmi.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process")
#print (allProcess.count)
for j in allProcess:
#print j.Properties_("PercentPrivilegedTime").__int__()
##print j.Properties_("name").__str__()+" "+j.Properties_("IDProcess").__str__()+" "+j.Properties_("PercentPrivilegedTime").__str__()
#for pro in j.Properties_:
# print (pro.name)
#break
name = j.Properties_("name").__str__()
if name != "_Total" and name !="Idle":
pid = j.Properties_("IDProcess").__str__()
PercentPrivilegedTime = j.Properties_("PercentPrivilegedTime").__int__()
WorkingSetPrivate = j.Properties_("WorkingSetPrivate").__int__()/1024
WorkingSet = j.Properties_("WorkingSet").__int__()/1024
allProcessList.append([name, pid, WorkingSetPrivate, WorkingSet, PercentPrivilegedTime])
return allProcessList
也可以用psutil
import psutil,time
from operator import itemgetter, attrgetter
def getProcessInfo(p):
"""取出指定进程占用的进程名,进程ID,进程实际内存, 虚拟内存,CPU使用率
"""
try:
cpu = int(p.cpu_percent(interval=0))
memory = p.memory_info()
rss = memory.rss/1024
vms = memory.vms/1024
name = p.name()
pid = p.pid
except psutil.Error:
name = "Closed_Process"
pid = 0
rss = 0
vms =