python終端模擬工具pexpect
阿新 • • 發佈:2018-11-14
原文:https://my.oschina.net/yongqing/blog/290679
Pexpect是一個純Python模組。 可以用來和ssh、ftp、passwd、telnet 等命令列程式進行自動互動。實現與命令列互動的自動化.
它提供了兩個主要介面 run()函式和spawn類.
run()函式
run功能相對簡單,只能實現簡單互動
run(command,timeout=-1,withexitstatus=False,events=None,extra_args=None, logfile=None, cwd=None, env=None)
run執行命令,然後返回結果,與os.system類似.
示例
pexpect.run('ls -la')
# 返回值(輸出,退出狀態)
(command_output, exitstatus) = pexpect.run('ls -l /bin', withexitstatus=1)
spawn類
spawn功能比run強大,可以實現更復雜互動
class spawn __init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)
timeout指定互動是等待的超時值
maxread設定read buffer大小. 每次pexpect嘗試從TTY(Teletype終端)從讀取的最大位元組數.
searchwindowsize 指定了從輸入緩衝區中進行模式匹配的位置,預設從開始匹配.
logfile 引數指定日誌的記錄位置
工作過程
# 第一步與終端建立連線 child = pexpect.spawn('scp foo [email protected]:.') # 第二步等待終端返回特定內容 child.expect('Password:') # 第三步根據返回內容傳送命令進行互動 child.sendline(mypassword)
pxssh類
pxssh是pexpect的派生類,用於建立ssh連線,比pexpect好用.
login() 建立到目標機器的ssh連線
logout() 釋放該連線
prompt() 等待提示符,通常用於等待命令執行結束
工作過程與pexpect相同
# 初始化pxssh示例
s = pxssh.pxssh()
hostname = raw_input('hostname: ')
username = raw_input('username: ')
password = getpass.getpass('password: ')
# 建立ssh連線
s.login (hostname, username, password)
# 傳送命令到遠端終端
s.sendline ('uptime') # run a command
# 等待遠端終端返回
s.prompt() # match the prompt
# 列印匹配到的內容
print s.before # print everything before the propt.
# 傳送命令到遠端終端
s.sendline ('ls -l')
# 等待遠端終端返回
s.prompt()
# 列印匹配到的內容
print s.before
s.sendline ('df')
s.prompt()
print s.before
# 釋放ssh連線
s.logout()