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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!