Python系统监控脚本

2021-02-20 02:33发布

 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

 

标签: