pexpect庫run函數的使用詳解
前面我們pexpect庫的spawn類的方法,在pexpect庫中,除了spawn類以外,還有其他工具和類。現在來看在pexpect庫中有哪些其他工具和類。
其他工具和類
1、run函數,是pexpect庫中用於運行簡單命令的基本函數。主要用於快速運行不用與其交互或僅需很少交互的程序。
2.它是簡化版的spawn類。
3.直接返回子程序運行的輸出信息。
4.commond主要是用於提供一個單獨的命令行,或者帶參數的命令行。在run函數中其他相關參數和spawn類的構造方法的參數基本是一樣的。
5.在run這個函數中,withexistatus為True時,返回輸出和退出狀態。也就是說如果將這個參數為默認值,此時在
對run函數,還可以用於與子程序進行簡單的交互,實現與子程序進行交互的參數是events。
events幾種形式
1.列表形式。在列表的每一項中,給出了子程序輸出某種信息時我們應該給它的應答是什麽。
2.字典形式。即字典的建是用於匹配的項。字典的建所定的值是應答子程序的字符串。要註意的是這裏應答子程序的字符串的末尾應有\n換行符。
pattern是要匹配的正則表達式或者字符串。resp可以是子命令。
run函數基本使用的實例
首先打開虛擬機,啟動一個終端,啟動Python3,導入pexpect庫。首先看一下,用run來運行一個基本的命令,比如運行ls目錄,這時我們指定它的工作目錄。和spawn類一樣,我們可以指定cwd這個參數。可以看到ls這個命令運行完以後,相應的信息也輸出了。為了觀看的方便,還可以將它進行解碼。復制它,可以看到這裏列出了home djx目錄下的所有文件,以及文件夾,當然在 run的參數中,子命令中,我們還可以為ls命令提供一個參數,比如:加上一個-l。同樣還是讓它列出djx目錄下的文件和目錄。它列出的信息比
現在來看,當提供withexitstatus參數為true時,它的返回狀況。我們運行最簡單的withexitstatus,可以看到此時的返回是一個原主的形式。它的原主的第一個部分從這個位置到這個位置的命令輸出,然後後面跟一個0,表示運行的ls這條命令是正常退出的返回碼為0。當然run函數還可以通過events這個參數與子程序進行交互。
下面我們用run的events參數與子程序交互的方法。首先嘗試通過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函數的使用詳解