這篇文章跟大家分享了利用python執行shell腳本並動態傳參 及subprocess基本使用,有感興趣的小伙伴可以看一看
最近工作需求中有遇到這個情況 在web端取得設定檔內容及往shell 腳本中動態傳入參數
執行shell腳本這個有多種方法 最後還是選擇了subprocess這個python標準函式庫
subprocess這個模組可以非常方便的啟動子程序,並且控制其輸入和輸出
Class Popen(args,bufsize = 0,executable=None,
stdin =None,stdout =None,stderr =None,#¥ stdin =None,st = None,close_fds = False,shell = False,
cwd = None,env = None,universal_newlines = False,
一個字串,或一系列程式參數。要執行的程式通常是args序列或字串中的第一項,但可以使用可執行參數進行明確設定。
在UNIX上,與shell=False(預設):在這種情況下,POPEN 類別使用os.execvp()來執行子程式。 args通常應該是一個序列。一個字串將被視為一個字串作為唯一項目(要執行的程式)的序列。
在UNIX上,使用shell = True:如果args是字串,則它指定要透過shell執行的命令字串。如果args是一個序列,則第一個項目指定命令字串,並且任何其他項目將被視為附加的shell參數。
如果不寫shell=True,預設為shell=False,需要在args的第一個參數指定執行器路徑
在Popen物件中,可以設值subprocess.stdout=PIPE 即透過管道p.stdout.read()取出該進程的標準輸出
如果close_fds為true,則在執行子程序之前,將關閉除0,1和2之外的所有檔案描述符。
如果shell為true,則指定的指令將透過shell執行。
如果cwd不是None,那麼在執行子代之前,目前目錄將變更為cwd。
如果env不是None,它將為新進程定義環境變數。
如果設定universal_newlines為true,則檔案物件stdout和stderr將作為文字檔案打開,但可能會有\ n,Unix行尾約定\ r,Macintosh約定或\ r \ n中的任何行終止, Windows約定。所有這些外部表示被Python程式視為\ n。注意:此功能僅在Python是使用通用換行支援(預設)建置時才可用。此外,檔案物件stdout,stdin和stderr的newlines屬性不會被communications()方法更新。
如果設定了STARTUPINFO和creationflags,將會傳遞到下層的CreateProcess()函數。他們可以指定諸如主視窗的外觀和新過程的優先順序等內容。 (僅限Windows)
Popen.poll() 檢查子程序是否終止,傳回物件的returncode
#Popen.wait() 等待子程序完成,阻塞。返回returncode
Popen.communicate(input=None) 將資訊輸入到進程,從stdout和stderr讀取數據,直到達到檔案結尾。等待進程終止。可選的stdin參數應該是要傳送到子進程的字串,如果沒有資料應傳送給子進程,則為None。
傳回一個元組(stdout,stderr) 但是讀取的資料快取在記憶體中,所以如果資料量很大或無限,就不要用這個方法
Popen.pid 回子程序的pid
Popen.returncode 讀取程序的狀態碼 None -子程序尚未結束;
==0而言──子流程正常退出;
> 0— 子程序異常退出,returncode對應於出錯碼;
#基於Python Shell取得hostname和fqdn釋疑
以上是利用python執行shell腳本 並動態傳參 及subprocess基本使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!