python跟H3C 5024E交換機交互獲取交換機的配置信息

# coding: utf8
import re, sys
import pexpect

# enable/disable debug mode
DEBUG = False


def telnet_login(ip, pwd, cmd, ps):
    child = pexpect.spawn('telnet %s' % ip)
    # 是否啓用調試模式, 默認位False,在上面設置DEBUG=True後開啓調試模式
    if DEBUG:
        print '[' + '-' * 30 + "DEBUG INFO START" + '-' * 30 + "]\n"
        child.logfile_read = sys.stdout  # telnet輸出至標準輸出
    child.expect('(?i)Password: ', timeout=2)  # 匹配Password: ,注意問號後有空格
    child.send(pwd + '\r')  # 這裏要輸入密碼+回車(\r),不要用sendline方法
    child.expect('Please press ENTER.\r\n', timeout=1)
    child.send('\r')  # 根據上面提示,按回車後繼續
    child.expect(ps[0], timeout=2)  # 匹配第1提示符
    child.send('system-view' + '\r')  # 進入system-view視圖
    child.expect(ps[1], timeout=2)  # 匹配第2個提示符
    output = ""
    out=""
    for tcmd in cmd:
        child.send(tcmd + '\r')  # 執行命令
        child.expect(tcmd + '\r')  # 匹配命令回顯
        child.expect(ps[1], timeout=2)  # 匹配命令執行完提示符
        out = child.before  # 捕獲命令的輸出結果
        if out != '':
            out = re.sub('.*\[.*', '', out)  # 處理輸出結果的尾部提示符
            out = re.sub('\015', '', out)  # 處理輸出結果的尾部^M(其實是回車符)
            output += "\n" + tcmd + "執行結果: \n"+"\n".join([j.strip() for j in out.split('\n') if j != ''])  # 刪除命令輸出中的多餘空行和行首尾空格
    return child, output


if __name__ == '__main__':
    host = "192.168.*.*"
    password = "######"
    command = ['dis ip', 'dis arp'] # 執行命令列表
    prompt = ['\)\>', '\)\]'] # 提示符
    c, cmdstdout = telnet_login(host, password, command, prompt)
    # debug開啓後, 也能夠把命令輸出結果寫入文件
    if DEBUG:
        with open("/tmp/telnet_output.txt", "w") as f:
            f.write(cmdstdout)
        print '\n\n[' + '-' * 30 + "DEBUG INFO END" + '-' * 30 + "]\n"
    print '[' + '-' * 30 + "telnet command output" + '-' * 23 + "]\n"
    print cmdstdout  # 打印命令執行結果
    c.close(force=True)
ide


## 註釋: 其中 c   和 cmdstdout 是用來接收 telnet_login 函數返回 的  child 和 output
函數


wKiom1Y6xLTxb49kAAMdanQloEw662.jpg

相關文章
相關標籤/搜索