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
来源:oschina
链接:https://my.oschina.net/u/4412687/blog/3742969