欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python之pexpect實(shí)現(xiàn)自動交互的例子

 更新時(shí)間:2019年07月25日 09:41:08   作者:appke8461  
今天小編就為大家分享一篇python之pexpect實(shí)現(xiàn)自動交互的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

運(yùn)行程序

程序要求人的判斷和輸入

Expect 通過關(guān)鍵字匹配

根據(jù)關(guān)鍵字向程序發(fā)送符合的字符

基本使用流程

pexpect 的使用說來說去,就是圍繞3個(gè)關(guān)鍵命令做操作:

首先用 spawn 來執(zhí)行一個(gè)程序

然后用 expect 來等待指定的關(guān)鍵字,這個(gè)關(guān)鍵字是被執(zhí)行的程序打印到標(biāo)準(zhǔn)輸出上面的

最后當(dāng)發(fā)現(xiàn)這個(gè)關(guān)鍵字以后,根據(jù)關(guān)鍵字用 send 方法來發(fā)送字符串給這個(gè)程序

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

spawn() - 執(zhí)行程序

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

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

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

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

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

正確的方式:

process = pexpect.spawn('/bin/bash –c "ls –l | grep LOG > log_list.txt"')

expect() - 關(guān)鍵字匹配

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

send() - 發(fā)送關(guān)鍵字

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

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

這個(gè)方法會返回發(fā)送字符的數(shù)量。

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

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

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

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

它也會返回發(fā)送的字符數(shù)量

sendcontrol() - 發(fā)送控制信號

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

process.sendcontrol('g')

簡單實(shí)例:

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遠(yuǎn)程登錄,pexpect又派生出了pxssh類,在ssh會話操作上再做一層封裝

其常用方法是:

login() #建立ssh連接

logout() #斷開ssh連接

prompt() #等待系統(tǒng)提示符,用于等待命令執(zhí)行結(jié)束

詳情請戳:http://www.dbjr.com.cn/article/156232.htm

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

相關(guān)文章

  • Python報(bào)錯(cuò):ModuleNotFoundError的解決辦法

    Python報(bào)錯(cuò):ModuleNotFoundError的解決辦法

    "ModuleNotFoundError: No module named 'xxx'"這個(gè)報(bào)錯(cuò)是個(gè)非常常見的報(bào)錯(cuò),幾乎每個(gè)python程序員都遇到過,下面這篇文章主要給大家介紹了關(guān)于Python報(bào):ModuleNotFoundError錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2022-06-06
  • python操作kafka實(shí)踐的示例代碼

    python操作kafka實(shí)踐的示例代碼

    這篇文章主要介紹了python操作kafka實(shí)踐的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python基本數(shù)據(jù)結(jié)構(gòu)與用法詳解【列表、元組、集合、字典】

    Python基本數(shù)據(jù)結(jié)構(gòu)與用法詳解【列表、元組、集合、字典】

    這篇文章主要介紹了Python基本數(shù)據(jù)結(jié)構(gòu)與用法,結(jié)合實(shí)例形式分析了Python基本數(shù)據(jù)結(jié)構(gòu)中的列表、元組、集合、字典相關(guān)概念、使用方法及推導(dǎo)式、遍歷等相關(guān)使用技巧,需要的朋友可以參考下
    2019-03-03
  • 關(guān)于DataFrame取值操作總結(jié)(取指定列指定值的行)

    關(guān)于DataFrame取值操作總結(jié)(取指定列指定值的行)

    這篇文章主要介紹了關(guān)于DataFrame取值操作總結(jié)(取指定列指定值的行),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Python編寫一個(gè)多線程的12306搶票程序的示例

    Python編寫一個(gè)多線程的12306搶票程序的示例

    對于很多人來說,搶購火車票人們成了一個(gè)令人頭疼的問題,本文主要介紹了Python編寫一個(gè)多線程的12306搶票程序的示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Python驗(yàn)證碼識別的方法

    Python驗(yàn)證碼識別的方法

    這篇文章主要介紹了Python驗(yàn)證碼識別的方法,涉及Python針對驗(yàn)證碼圖片的相關(guān)分析與操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python 實(shí)現(xiàn)倒排索引的方法

    python 實(shí)現(xiàn)倒排索引的方法

    今天小編就為大家分享一篇python 實(shí)現(xiàn)倒排索引的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python+matplotlib實(shí)現(xiàn)折線圖的美化

    Python+matplotlib實(shí)現(xiàn)折線圖的美化

    這篇文章主要和大家分享一個(gè)非常有趣的Python教程—如何美化一個(gè)?matplotlib折線圖。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • python pygame實(shí)現(xiàn)滾動橫版射擊游戲城市之戰(zhàn)

    python pygame實(shí)現(xiàn)滾動橫版射擊游戲城市之戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了python pygame實(shí)現(xiàn)滾動橫版射擊游戲城市之戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Pandas數(shù)值排序 sort_values()的使用

    Pandas數(shù)值排序 sort_values()的使用

    本文主要介紹了Pandas數(shù)值排序 sort_values()的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論