1. 程式人生 > >pexpect庫run函數的使用詳解

pexpect庫run函數的使用詳解

其他 clas its align exist 嘗試 使用詳解 輸出信息 地址

  前面我們pexpect庫的spawn類的方法,在pexpect庫中,除了spawn類以外,還有其他工具和類。現在來看在pexpect庫中有哪些其他工具和類。

  其他工具和類

  1run函數,是pexpect庫中用於運行簡單命令的基本函數。主要用於快速運行不用與其交互或僅需很少交互的程序。

  2.它是簡化版的spawn類。

  3.直接返回子程序運行的輸出信息。

  4.commond主要是用於提供一個單獨的命令行,或者帶參數的命令行。在run函數中其他相關參數和spawn類的構造方法的參數基本是一樣的。

  5.run這個函數中,withexistatusTrue時,返回輸出和退出狀態。也就是說如果將這個參數為默認值,此時在

run函數在運行完子程序以後,直接輸出的就是群運行的程序,它的所有的輸出信息。如果將這個參數為True時,run函數不僅返回子程序的輸入信息,同時還返回子程序的退出狀態,一般的正常退出為0

  對run函數,還可以用於與子程序進行簡單的交互,實現與子程序進行交互的參數是events

  events幾種形式

  1.列表形式。在列表的每一項中,給出了子程序輸出某種信息時我們應該給它的應答是什麽。

  2.字典形式。即字典的建是用於匹配的項。字典的建所定的值是應答子程序的字符串。要註意的是這裏應答子程序的字符串的末尾應有\n換行符。

  pattern是要匹配的正則表達式或者字符串。resp可以是子命令。

resp可以是一個函數,接受一個字典參數,其中保存的是run()中定義的變量及其值。

  run函數基本使用的實例

  首先打開虛擬機,啟動一個終端,啟動Python3,導入pexpect庫。首先看一下,用run來運行一個基本的命令,比如運行ls目錄,這時我們指定它的工作目錄。和spawn類一樣,我們可以指定cwd這個參數。可以看到ls這個命令運行完以後,相應的信息也輸出了。為了觀看的方便,還可以將它進行解碼。復制它,可以看到這裏列出了home djx目錄下的所有文件,以及文件夾,當然在 run的參數中,子命令中,我們還可以為ls命令提供一個參數,比如:加上一個-l。同樣還是讓它列出djx目錄下的文件和目錄。它列出的信息比

ls單獨的不帶參數的要更詳細一些。

技術分享

  現在來看,當提供withexitstatus參數為true時,它的返回狀況。我們運行最簡單的withexitstatus,可以看到此時的返回是一個原主的形式。它的原主的第一個部分從這個位置到這個位置的命令輸出,然後後面跟一個0,表示運行的ls這條命令是正常退出的返回碼為0。當然run函數還可以通過events這個參數與子程序進行交互。

  下面我們用runevents參數與子程序交互的方法。首先嘗試通過ftp命令來登錄服務器,然後登錄完以後再退出這個服務器。首先啟動服務器,查看本機的ip地址可以看到本機的ip地址為192.168.1.3,下面調用run這個函數,來登錄ftp服務器。輸出的結果保存在out中。提供的參數為ftp192.168.1.3 ,提供交互的參數為events。由於這個交互的參數既可以為列表也可以為字典形式,這裏首先用字典形式來定義交互。登錄ftp的用戶名為命名用戶,這裏要提供換行符。登錄的密碼為ab這個簡單的字符串,也要提供換行符。登錄成功時,服務器返回的是230,然後輸入fine直接退出。輸出out,可以看到此時已經連接到ftp服務器上了。當連接完成以後,輸入fine命令退出服務器。通過ftp的日誌也可以看出登錄了ftp服務器使用命名用戶,然後使用ab來通過登錄,最後退出ftp服務器。

技術分享

  下面我們將為run提供一個events參數,events參數為列表形式,同樣的輸出信息放到out中,此命令為192.168.1.3,也就是訪問本機的ftp服務器。第一個仍然是匹配name,也就是輸入用戶名為命名用戶,密碼為ab,當要求用戶輸入密碼的時候,就用ab來替代。當成功登錄時候返回的是230代碼,並輸入fine來退出ftp。查看out,可以看出也是連接上ftp服務器,並且成功以後也退出了登錄。這裏是以字典的形式,這裏是以列表的形式提供參數的。下面接著看對這個應答信息,提供一個函數作為一個參數的情況,首先定義一個函數,它需要接受一個參數d,也就是一個字典參數,在這個應答信息中,我們不進行其他的動作,也就是返回為空,但我們將run這個函數它相關選項直接打印出來。然後我們視圖運行nslookup,查詢麥子學院的ip地址。然後提供events參數,當輸出的信息中含有server,就調用這個resp函數。可以看到運行的時候它匹配到了這個server,這個輸出信息中有server內容。此時會調用resp這個函數,輸出d也就是run當中所定義的所有變量字典。這個字典正好在這個位置。

技術分享

原文鏈接:http://www.maiziedu.com/wiki/library/run/

pexpect庫run函數的使用詳解