python終端模擬工具:pexpect
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 user@example.com:.') # 第二步等待終端返回特定內容 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()
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!