Python模塊之pxssh(expect應用)


Expect 程序主要用於人機對話的模擬,就是那種系統提問,人來回答 yes/no ,或者賬號登錄輸入用戶名和密碼等等的情況。因為這種情況特別多而且繁瑣,所以很多語言都有各種自己的實現。

最初的第一個 Expect 是由 TCL 語言實現的,所以后來的 Expect 都大致參考了最初的用法和流程。

pexpect 是 Python 語言的類 Expect 實現。pxssh模塊用於在python中ssh遠程連接,執行命令,返回結果,但注意不支持Windows系統

例一

 1 #!/usr/bin/env python
 2  
 3 #-*- coding:utf-8 -*-
 4 
 5 from pexpect import pxssh
 6  
 7 host = "172.16.1.15"
 8 username = "root"
 9 password = "123456"
10 cmd1 = "ifconfig"
11 cmd2 = "uptime"
12  
13 try:
14     s = pxssh.pxssh()      #實例化一個對象
15     s.login(host,username,password)      #登錄
16  
17     s.sendline(cmd1)       #執行命令
18     s.prompt()             #匹配cmd1執行后的下一步操作的命令提示符
19     print s.before         #輸出命令提示符之前的內容
20  
21     s.sendline(cmd2)
22     s.prompt()             #s.prompt()按順序匹配命令提示符,即如果注釋上一個s.prompt(),這次會匹配cmd1執行后的命令提示符,s.before也只會輸出cmd1返回的結果
23     print s.before         #s.before指的是兩個命令提示符之間的內容,即如果注釋上一個print s.before,這次也只會輸出cmd2返回的結果,而不是cmd1+cmd2的內容
24  
25     s.logout()             #登出
26  
27 except :
28     print "pxssh failed on login."

 

例二

#!/usr/bin/python
#coding:utf-8

from pexpect.pxssh import pxssh


class SSH:
    def __init__(self):
        pass

    def connect(self, ip, user='root', password='zx123456'):
        self.ssh = pxssh()
        try:
            self.ssh.login(ip, user, password)
            return True
        except Exception as e:
            import sys
            print(sys.exc_info())
            return False
    def execute(self,command):
        CR = '\r\n'
        self.ssh.sendline(command) # 執行命令
        self.ssh.prompt() # 匹配command執行后的下一步操作的命令提示符
        # self.ssh.before 指的是兩個命令提示符之間的內容
        data = (self.ssh.before).split(CR.encode('utf-8'))[1:-1]
        for each in data:
            print(each.decode('utf-8'))

 

>>> from ssh import SSH
>>> H1 = SSH()
>>> H1.connect('192.168.11.171')    # ssh連接到11.171
True
>>> H1.execute('pwd') # 在11.171上執行pwd命令
/root

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM