python系統監控及郵件傳送 阿新 • • 發佈:2018-11-24 python系統監控及郵件傳送 #psutil模組是一個跨平臺庫,能輕鬆實現獲取系統執行的程序和系統利用率 import psutil #先匯入psutil模組 res = psutil.cpu_percent(1) #1s內cpu的使用率 print(res) res1 = psutil.cpu_percent(1,True) #每一秒cpu的佔用率 print(res1) res2 = psutil.virtual_memory() #記憶體使用率 print(res2) print( '%.2f%%' %res2[2]) #以百分比形式列印第三位 res4 = psutil.disk_usage('C:') #硬碟分割槽的使用率 print(res4) res5 = psutil.net_io_counters() #檢視網路流量 print(res5) 監控程式 #匯入模組(獲取系統資訊和郵件模組) import psutil import smtplib from email.mime.text import MIMEText from email.header import Header #cpu模組 def cpu_info(): cpu = '%.2f%%' %psutil.cpu_percent(1) #把cpu的值改成百分比的形式 return cpu #記憶體模組 def mem_info(): mem = psutil.virtual_memory() mem_per = '%.2f%%' %mem[2] #同上 mem_total = str(int(mem[0]/1024/1024)) + 'M' mem_used = str(int(mem[3]/1024/1024)) + 'M' info = { 'mem_per' : mem_per, 'mem_total' : mem_total, 'mem_used' : mem_used } return info #磁碟分割槽模組 def disk_info(): c_per = '%.2f%%' %psutil.disk_usage('C:')[3] d_per = '%.2f%%' %psutil.disk_usage('D:')[3] info = { 'c_per' : c_per, 'd_per' : d_per } return info #網絡卡模組 def network_info(): network = psutil.net_io_counters() network_sent = str(int(network[0]/8/1024)) + 'kb' network_recv = str(int(network[1]/8/1024)) + 'kb' info = { 'network_sent' : network_sent, 'network_recv' : network_recv } return info #郵件傳送模組 def send_mail(message): sender = ' [email protected]' #傳送的郵箱賬號 receiver = [' [email protected]'] #接收的郵箱賬號 subject = '報警' #主題 username = ' [email protected]' #傳送的郵箱賬號 password = 'password' #傳送的郵箱密碼 msg = MIMEText(message, 'plain', 'utf-8') #(郵件正文,編碼,編碼) msg['Subject'] = Header(subject, 'utf-8') #擡頭為subject msg['From'] = 'TOP< [email protected]>' #TOP標題 後面是郵箱 msg['To'] = "' [email protected]'" #接收的郵箱 smtp = smtplib.SMTP() smtp.connect(' smtp.163.com') #郵箱伺服器 smtp.login(username, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit() #主函式 def main(): cpu = cpu_info() mem = mem_info() disk = disk_info() network = network_info() msg = ''' cpu使用率:%s ================== 記憶體佔用率:%s 記憶體總量:%s 記憶體使用量:%s =================== C盤使用率:%s D盤使用率:%s ==================== 網絡卡傳送量:%s 網絡卡接收量:%s ''' % (cpu, mem.get('mem_per'), mem.get('mem_total'), mem.get('mem_used'), disk.get('c_per'), disk.get('d_per'), network.get('network_sent'), network.get('network_recv')) if int(cpu[:2]) > 80 or int(mem.get('mem_per')[:2]) > 80: #報警傳送條件 send_mail(msg) else : print('沒到閾值。') if __name__ == '__main__': main()