亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python之pexpect實現自動交互的例子

系統 1624 0

Pexpect 是 Expect 語言的一個 Python 實現,是一個用來啟動子程序,并使用正則表達式對程序輸出做出特定響應,以此實現與其自動交互的 Python 模塊。 Pexpect 的使用范圍很廣,可以用來實現與 ssh、ftp 、telnet 等程序的自動交互;可以用來自動復制軟件安裝包并在不同機器自動安裝;還可以用來實現軟件測試中與命令行交互的自動化。

整體來說大致的流程包括:

運行程序

程序要求人的判斷和輸入

Expect 通過關鍵字匹配

根據關鍵字向程序發送符合的字符

基本使用流程

pexpect 的使用說來說去,就是圍繞3個關鍵命令做操作:

首先用 spawn 來執行一個程序

然后用 expect 來等待指定的關鍵字,這個關鍵字是被執行的程序打印到標準輸出上面的

最后當發現這個關鍵字以后,根據關鍵字用 send 方法來發送字符串給這個程序

第一步只需要做一次,但在程序中會不停的循環第二、三步來一步一步的完成整個工作。掌握這個概念之后 pexpect 的使用就很容易了。當然 pexpect 不會只有這 3 個方法,實際上還有很多外圍的其他方法,

spawn() - 執行程序

spawn() 方法用來執行一個程序,它返回這個程序的操作句柄,以后可以通過操作這個句柄來對這個程序進行操作,比如:

            
process = pexpect.spawn('ftp sw-tftp')
          

上面 spawn() 中的字符串就是要執行的程序,這里我們打開一個到 sw-tftp 服務器的 ftp 連接。 spawn() 中的第一個元素就是要執行的命令,除此之外還可以指定一些其他參數,比如: pexpect.spawn('ftp sw-tftp', timeout=60) 就指定了超時時間,這些具體的會在后面講解。

process 就是 spawn() 的程序操作句柄了,之后對這個程序的所有操作都是基于這個句柄的,所以它可以說是最重要的部分。

注意: spawn() ,或者說 pexpect 并不會轉譯任何特殊字符 比如 | * 字符在Linux的shell中有特殊含義,但是在 pexpect 中不會轉譯它們,如果在 linux 系統中想使用這些符號的正確含義就必須加上 shell 來運行,這是很容易犯的一個錯誤。

正確的方式:

            
process = pexpect.spawn('/bin/bash ?Cc "ls ?Cl | grep LOG > log_list.txt"')
          

expect() - 關鍵字匹配

當 spawn() 啟動了一個程序并返回程序控制句柄后,就可以用 expect() 方法來等待指定的關鍵字了。它最后會返回 0 表示匹配到了所需的關鍵字,如果后面的匹配關鍵字是一個列表的話,就會返回一個數字表示匹配到了列表中第幾個關鍵字,從 0 開始計算。

send() - 發送關鍵字

send() 作為3個關鍵操作之一,用來向程序發送指定的字符串,它的使用沒什么特殊的地方,比如:

            
process.expect("ftp>")
process.send("by\n")
          

這個方法會返回發送字符的數量。

sendline() - 發送帶回車符的字符串

sendline() 和 send() 唯一的區別就是在發送的字符串后面加上了回車換行符,這也使它們用在了不同的地方:

只需要發送字符就可以的話用send()

如果發送字符后還要回車的話,就用 sendline()

它也會返回發送的字符數量

sendcontrol() - 發送控制信號

sendcontrol() 向子程序發送控制字符,比如 ctrl+C 或者 ctrl+D 之類的,比如你要向子程序發送 ctrl+G ,那么就這樣寫:

            
process.sendcontrol('g')
          

簡單實例:

            
command = 'ssh '+username+'@'+host 
child = pexpect.spawn(command) 
ret = child.expect([pexpect.TIMEOUT,'Are you sure you want to continue connecting','[P|p]assword']+PROMPT) 
if ret == 0: 
  print('[-] Error Connecting') 
  return 
if ret == 1: 
  child.sendline('yes') 
  ret = child.expect([pexpect.TIMEOUT,'[p|P]assword']) 
  if ret == 0: 
    print('[-] Error Connecting') 
    return 
  if ret == 1: 
    send_command(password) 
    return 
if ret == 2: 
  send_command(password) 
  return 
return child
          

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

其常用方法是:

login() #建立ssh連接

logout() #斷開ssh連接

prompt() #等待系統提示符,用于等待命令執行結束

詳情請戳:https://www.jb51.net/article/156232.htm

以上這篇python之pexpect實現自動交互的例子就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品第一区二区在线 | 奇米影视四色狠狠888俺去啦 | 色综合久久98天天综合 | 亚洲精品久久久久久久久久ty | 中文字幕视频在线 | 国产精品嘿咻嘿咻在线播放 | 四虎精品成人免费视频 | 精品久久一区二区三区 | 狠狠干狠狠色 | 噜噜啪 | 精品日韩在线视频 | 成人毛片免费视频 | 国产精品久久久久免费a∨ 国产精品久久久久免费视频 | 4hu四虎永久免在线视看 | 巨乳毛片| 亚洲精品视频在线播放 | 国产福利在线免费观看 | 久草首页在线观看 | 97理论片 | 女女同免费播放毛片 | 日韩一区二区不卡中文字幕 | 91亚洲国产成人精品性色 | 国产精品久久久久久久久久免费 | 色综合久久综合欧美综合图片 | 亚洲精品一区亚洲精品 | 乱人伦精品一区二区 | 91福利社在线观看 | 女人寂寞偷人视频a级 | 日本不卡专区 | 99av在线播放| 老司机午夜精品视频在线观看免费 | 久久综合九色综合亚洲 | 日本一级一片免在线观看 | 狠狠色噜噜狠狠狠狠黑人 | 亚洲综合色婷婷中文字幕 | 久久国产精品99久久久久久牛牛 | 四虎在线观看视频 | 露脸超嫩97后在线播放 | 欧美性猛交ⅹxxx乱大交按摩 | 中文字幕第一页国产 | 亚洲高清中文字幕一区二区三区 |