python是典型的膠水語言,可以來做粘合複雜程式的應用,在終端上可以隨意地組合他和其它程式,作為乙個中間處理模組。
python可以利用subprocess這個模組來產生子程序,並連線到子程序的標準輸入/輸出/錯誤中去,還可以得到子程序的返回值。
如下
p = subprocess.popen(r'xx.exe',stdin = none,stdout=subprocess.pipe,stderr=subprocess.pipe,shell=true)
return_code = p.wait()
list = p.stdout.read().splitlines()
for i in range(len(list)): item = list[i]
注意:第乙個引數字串在windows下要加r,表示不轉義,以防有路徑時'\'被轉義
pipe管道是在類unix
作業系統(以及一些擴充套件,windows)中,管道(英語:pipeline
)是原始的軟體管道
:即是乙個由標準輸入輸出鏈結起來的程序集合,所以每乙個程序的輸出(stdout
)被直接作為下乙個程序的輸入(stdin
)。主要用到了subprocess.popen函式:
class subprocess.popen( args,
bufsize=0,
executable=none,
stdin=none,
stdout=none,
stderr=none,
preexec_fn=none,
close_fds=false,
shell=false,
cwd=none,
env=none,
universal_newlines=false,
startupinfo=none,
creationflags=0)
args引數:
可以是乙個字串,可以是乙個包含程式引數的列表。要執行的程式一般就是這個列表的第一項,或者是字串本身。
如:subprocess.popen(["cat","test.txt"])
bufsize引數:
如果指定了bufsize引數作用就和內建函式open()一樣:0表示不緩衝,1表示行緩衝,其他正數表示近似的緩衝區位元組數,負數表示使用系統預設值。預設是0。
executable引數:
指定要執行的程式。它很少會被用到:一般程式可以由args 引數指定。如果shell=true ,executable 可以用於指定用哪個shell來執行(比如bash、csh、zsh等)。*nix下,預設是 /bin/sh ,windows下,就是環境變數 comspec 的值。windows下,只有當你要執行的命令確實是shell內建命令(比如dir ,copy 等)時,你才需要指定shell=true
,而當你要執行乙個基於命令列的批處理指令碼的時候,不需要指定此項。
stdin stdout和stderr:
stdin stdout和stderr,分別表示子程式的標準輸入、標準輸出和標準錯誤。可選的值有pipe或者乙個有效的檔案描述符(其實是個正整數)或者乙個檔案物件,還有none。如果是pipe,則表示需要建立乙個新的管道,如果是none,不會做任何重定向工作,子程序的檔案描述符會繼承父程序的。另外,stderr的值還可以是stdout,表示子程序的標準錯誤也輸出到標準輸出。
preexec_fn引數:
如果把preexec_fn設定為乙個可呼叫的物件(比如函式),就會在子程序被執行前被呼叫。(僅限*nix)
close_fds引數:
如果把close_fds設定成true,*nix下會在開子程序前把除了0、1、2以外的檔案描述符都先關閉。在 windows下也不會繼承其他檔案描述符。
shell引數:
如果把shell設定成true,指定的命令會在shell裡解釋執行。
cwd引數:
如果cwd不是none,則會把cwd做為子程式的當前目錄。注意,並不會把該目錄做為可執行檔案的搜尋目錄,所以不要把程式檔案所在目錄設定為cwd 。
env引數:
如果env不是none,則子程式的環境變數由env的值來設定,而不是預設那樣繼承父程序的環境變數。注意,即使你只在env裡定義了某乙個環境變數的值,也會阻止子程式得到其他的父程序的環境變數(也就是說,如果env裡只有1項,那麼子程序的環境變數就只有1個了)。
注意在windows下,api函式createprocess接受的是乙個字串。即使是列表形式的引數,也需要先合併成字串再傳遞給api函式。
則 subprocess.popen("xx.exe" shell=true)
相當於 subprocess.popen(」cmd.exe /c 「+「xx.exe」 shell=true)
一定要注意路徑問題
管道 popen與pclose(二)
includefile popen const char command,const char type 建立管道並啟動command的程序 type r 將呼叫程序讀進command的標準輸出 type w 將呼叫程序寫到command的標準輸入 注意 呼叫popen不對標準錯誤輸出做任何處理,只...
利用popen執行linux程式
要想遠端執行伺服器上的程式,使用socket呼叫popen函式是個不錯的選擇 popen使用fifo管道執行外部程式。include file popen const char command,const char type int pclose file stream popen 通過type是r...
基於管道的popen和pclose函式
標準i o函式庫提供了popen函式,它啟動另外乙個程序去執行乙個shell命令列。這裡我們稱呼叫popen的程序為父程序,由popen啟動的程序稱為子程序。popen函式還建立乙個管道用於父子程序間通訊。子程序要麼從管道讀資訊,要麼向管道寫資訊,至於是讀還是寫取決於父程序呼叫popen時傳遞的引數...