python之pexpect模塊


最近在看《Python自動化運維技術與最佳實戰》這本書,學到了一個運維中用到的模塊:pexpect

下面是其定義:

Pexpect 是一個用來啟動子程序並對其進行自動控制的 Python 模塊,它可以用來和像 ssh、ftp、passwd、telnet 等命令行程序進行自動交互。

 

從書中我摘取了相關實例並配有注釋,用來記錄pexpect常用方法:

下面這個實例功能是:以ssh遠程登錄,登錄成功后執行命令‘ls -lh’

 1 import pexpect
 2 import sys
 3 
 4 #通過spawn類啟動和控制子應用程序
 5 child = pexpect.spawn('ssh root@192.168.1.22')
 6 
 7 #將pexpect的輸入輸出信息寫到mylog.txt文件中
 8 fout = file('mylog.txt','w')
 9 child.logfile = fout
10 
11 #將pexpect的輸入輸出信息輸出到標准輸出
12 #child.logfile = sys.stdout
13 
14 #expect方法用來判斷子程序產生的輸出,判斷是否匹配相應字符串
15 child.expect('password:')
16 #字符串匹配則使用sendline進行回應-----send:發送命令,不回車、sendline:發送命令,回車、sendcontrol:發送控制符,如:sendctrol('c')等價於‘ctrl+c'、sendeof:發送eof
17 child.sendline('123456')
18 child.expect('#')
19 child.sendline('ls -lh')
20 child.expect('#')
pexpect之spawn類

當然,ssh登錄還可以使用pexpect的run函數實現:

#events是一個字典,定義了expect和sendline的對應關系
pexpect.run('ssh root@192.168.1.22',events={'password:','123456'})

 

 

針對ssh遠程登錄,pexpect又派生出了pxssh類,在ssh會話操作上再做一層封裝

其常用方法是:

login()  #建立ssh連接
logout()  #斷開ssh連接
prompt()  #等待系統提示符,用於等待命令執行結束

 

下面是使用pxssh類來進行遠程連接並進行操作的實例:

 1 from pexpect import pxssh
 2 import getpass
 3 
 4 try:
 5     s = pxssh.pxssh()   #創建pxssh對象
 6 
 7     hostname = raw_input('hostname:')
 8     username = raw_input('username:')
 9     password = getpass.getpass('password:')   #接收密碼輸入
10 
11     s.login(server=hostname,username=username,password=password)  #建立ssh連接
12 
13     s.sendline('uptime')  #運行uptime命令
14     s.prompt()   #匹配系統提示符
15     print s.before  #打印出現系統提示符前的命令輸出
16 
17     s.sendline('ls -lh')  #運行命令
18     s.prompt()   #匹配系統提示符
19     print s.before  #打印出現系統提示符前的命令輸出
20 
21     s.sendline('df -h')  #運行命令
22     s.prompt()   #匹配系統提示符
23     print s.before  #打印出現系統提示符前的命令輸出
24 
25     s.logout()  #斷開ssh連接
26 
27 except pxssh.ExceptionPxssh as e:
28     print 'pxssh failed on login'
29     print str(e)
pxssh類

 

 


免責聲明!

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



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