開發與維運

Python腳本實現交換機狀態信息獲取

Python腳本實現交換機狀態信息獲取

簡述

通過paramiko(python ssh包)ssh連接交換機並執行狀態信息命令,將結果通過正則清洗後以郵件形式推送給目標郵箱,過程中涉及包導入、SMTP協議、正則表達式、ssh協議

步驟

安裝ssh包並連接交換機

pip install paramiko
github

    def ssh_result(self, cmd):
        t = paramiko.Transport(self.ip, self.port)
        t.connect(username=self.username, password=self.password)
        chan = t.open_session()
        chan.settimeout(timeout=15)
        chan.get_pty()
        chan.invoke_shell()
        time.sleep(5)
        i = 1
        while i < 10:
            chan.send(cmd)
            i += 1
        time.sleep(2)
        result = chan.recv(65535)
        result = str(result, encoding='utf-8')
        return result

清洗數據

返回列表類型

class Regule:
    def __init__(self, string):
        self.string = string

    def PwrStatus(self):
        pattern = re.compile(r'PWR1.*')
        listP = pattern.findall(self.string)[0][:-2].split()  # split以空格分詞
        return listP

    def FanStatus(self):
        pattern = re.compile(r'FAN1.*')
        listF = pattern.findall(self.string)[0][:-2].split()
        return listF

    def SwitchStatus(self):
        pattern = re.compile(r'-.*S5730.*')
        listS = pattern.findall(self.string)[1][:-2].split()
        return listS

    def Temperature(self):
        pattern = re.compile(r'NA.*[0-9]')
        # listTem = pattern.findall(string)[2:][2:].split()
        listTem = pattern.findall(self.string)[0][6:].split()
        return listTem

郵件發送

借用QQ郵箱的郵件服務器

class mail:
    def __init__(self):
        value = config.Mailvalue()
        self.mail_user = value.mail_user
        self.mail_host = value.mail_host
        self.mail_pass = value.mail_pass

    def sendmail(self, receivers,context):
        sender = '[email protected]'
        # receivers = ['[email protected]']  # 接收郵件,可設置為你的QQ郵箱或者其他郵箱

        message = MIMEText(context, 'plain', 'utf-8')
        message['From'] = Header("info_center", 'utf-8')
        message['To'] = Header("administrator", 'utf-8')

        subject = 'Switch_info'
        message['Subject'] = Header(subject, 'utf-8')
        try:
           smtpObj = smtplib.SMTP()
           smtpObj.connect(self.mail_host, 25)    # 25 為 SMTP 端口號
           smtpObj.login(self.mail_user, self.mail_pass)
           smtpObj.sendmail(sender, receivers, message.as_string())
           print("郵件發送成功")
        except smtplib.SMTPException:
           print("Error: 無法發送郵件")

完整代碼地址

github:https://github.com/PyMt/Mm

Leave a Reply

Your email address will not be published. Required fields are marked *