使用Python建立一個系統監控程式

專注的阿熊發表於2020-05-18

psutil (程式和系統實用程式)是一個跨平臺的庫,用於檢索  Python 中有關正在執行的程式和系統利用率( CPU ,記憶體,磁碟,網路,感測器)的資訊。它主要用於系統監視,概要分析和限制程式資源以及管理正在執行的程式。

 

1 、安裝 psutil

 

pip3 install psutil    # python2 使用者直接使用 pip install psutil

 

2 、建立 get_system_info.py 檔案,獲取系統狀態

 

 1 import psutil as p

 2

 3

 4 def memory(): # 獲取記憶體資訊

 5     info = p.virtual_memory()

 6     return info[2]

 7

 8

 9 def disk(): # 獲取磁碟使用情況

10     info = p.disk_usage('/')

11     return info[-1], info[-2]

12

13

14 def cpu(): # 獲取 CPU 使用率

15     info = p.cpu_percent(1)

16     return info

# 在此只使用了博主所需的相關功能,詳細說明見

 

3 、建立郵件傳送 send_Email.py 檔案

 

 1 import smtplib

 2 from email.header import Header

 3 from email.mime.text import MIMEText

 4 from email.utils import formataddr

 5

 6

 7 class send_Email():

 8     def __init__(self, mail_host, mail_port, mail_user, mail_pass, sender):

 9         self.mail_host = mail_host

10         self.mail_port = mail_port

11         self.mail_user = mail_user

12         self.mail_pass = mail_pass

13         self.sender = sender

14

15     def make_mail(self, title, code, receiver): # 生成郵件

16         mail_msg = """

17         <h1>%s</h1>

18         <p>%s</p>

19         """ % (title, code)

20         self.message = MIMEText(mail_msg, "html", "utf-8")

21         self.message['From'] = formataddr(["XX", self.sender])

22         self.message['To'] = formataddr(["User", receiver])

23         subject = title

24         self.message['Subject'] = Header(subject, "utf-8")

25

26     def send(self, receiver, title, code): # 傳送郵件

27         status = 0

28         self.make_mail(title, code, receiver)

29         try:

30             self.smtpObj = smtplib.SMTP_SSL(self.mail_host, self.mail_port)

31             # print(1)

32             self.smtpObj.login(self.mail_user, self.mail_pass)

33             # print(2)

34             self.smtpObj.sendmail(self.sender, [receiver], self.message.as_string())

35             self.smtpObj.quit()

36             status = 1

37         except smtplib.SMTPException as e:

38             print("Error ! 無法傳送郵件!!! " + e)

39         return status

4 、整合程式碼

 

from send_Email import send_Email

import get_system_info as gsi

 

email = send_Email("smtp.163.com", 465, "*******@***.com", "**********", "********@***.com") # 初始化

memory = gsi.memory()

disk, capacity = gsi.disk()

info = str(memory)+"     "+str(disk)+"     "+str(round(capacity/1024/1024/1024, 2))

email.send(code=info, title=" 系統狀態異常 ", receiver="*******@***.***")

status_d = 0

status_m = 0

while True: # 實時檢測系統狀態,會佔用一定的系統資源

    memory = gsi.memory()

    disk, capacity = gsi.disk()

    if memory >= 80 and status_m == 0:

        status_m = 1

        data = " 當前記憶體佔用率為 "+str(memory)+"% ,建議清理或擴充記憶體! "

        email.send(code=data, title=" 系統狀態異常 ", receiver="*******@***.***")

    elif memory < 80:

        status_m = 0

    if disk >= 80 and status_d == 0:

        status_d = 1

        data = " 當前硬碟已使用 "+str(disk)+"% ,剩餘 "+str(round(capacity/1024/1024/1024, 2))+"GB ,請及時擴充! "

                                        if disk >=貨幣符號https://www.gendan5.com/currencyworld.html

        email.send(receiver="*******@***.***", title=" 系統狀態異常 ", code=data)

    elif disk < 80:

        status_d = 0

    if memory >= 90 and status_m == 1:

        status_m = 2

        data = " 當前記憶體佔用率為 "+str(memory)+"% ,建議清理或擴充記憶體! "

        email.send(code=data, title=" 系統狀態異常 ", receiver="*******@***.***")

    elif memory < 90:

        status_m = 1

    if disk >= 90 and status_d == 1:

        status_d = 2

        data = " 當前硬碟已使用 "+str(disk)+"% ,剩餘 "+str(round(capacity/1024/1024/1024, 2))+"GB ,請及時擴充! "

        email.send(receiver="*******@***.***", title=" 系統狀態異常 ", code=data)

    elif disk < 90:

        status_d = 1

程式仍有不足之處,請大佬多多指教。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2692814/,如需轉載,請註明出處,否則將追究法律責任。

相關文章