Python系统监控脚本
1 import psutil #载入psutil模块 2 import smtplib #载入smtplib模块 3 from email.mime.text import MIMEText 4 from email.header import Header 5 6 def cpu_info(): #定义CPU使用率函数 7 cpu = '%.2f%%'% psutil.cpu_percent(1) #截取1秒内cpu的使用率。 8 return cpu 9 # %.2f表示输出浮点数并保留两位小数。%%表示直接输出一个%。 10 def mem_info(): #定义内存使用率 11 mem = psutil.virtual_memory() 12 mem_per ='%.2f%%'% mem[2] 13 mem_total = str(int(mem[0]/1024/1024)) + 'M' 14 mem_used = str(int(mem[3]/1024/1024)) + 'M' 15 info = { 16 'mem_per':mem_per, 17 'mem_total':mem_total, 18 'mem_used':mem_used 19 } #建立字典,方便后边调用值 20 return info 21 def disk_info(): 22 c = psutil.disk_usage('c:') 23 d = psutil.disk_usage('d:') 24 e = psutil.disk_usage('e:') 25 f = psutil.disk_usage('f:') 26 c_per = '%.2f%%'% c[3] 27 d_per = '%.2f%%'% d[3] 28 e_per = '%.2f%%'% e[3] 29 f_per = '%.2f%%'% f[3] 30 info = { 31 'c_per': c_per, 32 'd_per': d_per, 33 'e_per': e_per, 34 'f_per': f_per, 35 } 36 return info 37 38 def network_info(): 39 network = psutil.net_io_counters() 40 network_sent = str(int(network[0]/1024)) + 'Kb' 41 network_recv = str(int(network[1]/1024)) + 'Kb' 42 info = { 43 'network_sent':network_sent, 44 'network_recv':network_recv 45 } 46 return info 47 48 49 def send_mail(message): #定义发邮件函数 50 a = ['1351841****@163.com','1731017****@163.com','1731023****@163.com'] #定义一个列表a为接收方 51 sender = '132079****@qq.com' #发送方 52 for i in a: 53 receiver = i 54 subject = '报警' 55 username = '132079****@qq.com' #发送方使用的账户名 56 password = 'ziisvyxvzbeg****' #发送方的授权码密码 57 msg = MIMEText(message, 'plain', 'utf-8') 58 msg['Subject'] = Header(subject, 'utf-8') 59 msg['From'] = sender 60 msg['To'] = receiver 61 smtp = smtplib.SMTP() 62 smtp.connect('smtp.qq.com') #邮件服务器 63 smtp.login(username, password) 64 smtp.sendmail(sender, receiver, msg.as_string()) 65 smtp.quit() 66 #接收方只有一个用户时,网易、QQ都好使;接收方为多用户时,QQ好使 67 68 def main(): #主函数 69 cpu = cpu_info() 70 mem = mem_info() 71 disk = disk_info() 72 network = network_info() 73 info = ''' 74 CPU使用率:%s 75 ============= 76 内存使用率:%s 77 总内存:%s 78 已使用内存:%s 79 ============= 80 C盘使用率:%s 81 D盘使用率:%s 82 E盘使用率:%s 83 F盘使用率:%s 84 ============= 85 网卡发送流量:%s 86 网卡接收流量:%s 87 88 ''' % (cpu,mem.get('mem_per'),mem.get('mem_total'),mem.get('mem_used'),disk.get('c_per'),disk.get('d_per'),disk.get('e_per'),disk.get('f_per'),network.get('network_sent'),network.get('network_resv')) 89 90 if int(cpu[:-4]) > 80 or int(mem.get('mem_per')[:-4]) > 60: 91 send_mail(info) #根据需求进行阈值设置 92 # print(msg) 93 else: 94 print('电脑运行良好,没有到阈值') 95 96 if __name__ == '__main__': 97 main() 98 #当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行 99