python終端模擬工具:pexpect

jopen 10年前發布 | 27K 次閱讀 pexpect Python開發

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