subprocess允許你啟動乙個新的程序並與其通訊。
subprocess模組中只定義了乙個類,popen。
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
可以是字串或者序列型別(如:list,元組),用於指定程序的可執行檔案及其引數。如果是序列型別,第乙個元素通常是可執行檔案的路徑。我們也可以顯式的使用executeable引數來指定可執行檔案的路徑。
bufsize
指定緩衝。0 無緩衝,1 行緩衝,其他 緩衝區大小,負值 系統緩衝(全緩衝)
stdin, stdout, stderr
分別表示程式的標準輸入、輸出、錯誤控制代碼。他們可以是pipe,檔案描述符或檔案物件,也可以設定為none,表示從父程序繼承。
preexec_fn
只在unix平台下有效,用於指定乙個可執行物件(callable object),它將在子程序執行之前被呼叫。
close_sfs
在windows平台下,如果close_fds被設定為true,則新建立的子程序將不會繼承父程序的輸入、輸出、錯誤管道。我們不能將close_fds設定為true同時重定向子程序的標準輸入、輸出與錯誤(stdin, stdout, stderr)。
shell
shell設為true,程式將通過shell來執行。
cwd
用於設定子程序的當前目錄
env
字典型別,用於指定子程序的環境變數。如果env = none,子程序的環境變數將從父程序中繼承。
universal_newlines
不同作業系統下,文字的換行符是不一樣的。如:windows下用』/r/n』表示換,而linux下用』/n』。如果將此引數設定為true,python統一把這些換行符當作』/n』來處理。startupinfo與createionflags只在windows下用效,它們將被傳遞給底層的createprocess()函式,用於設定子程序的一些屬性,如:主視窗的外觀,程序的優先順序等等。
startupinfo,createionflags
只在windows下有效,它們將被傳遞給底層的createprocess()函式,用於設定子程序的一些屬性,如:主視窗的外觀,程序的優先順序等等。
poll()
用於檢查子程序是否已經結束。設定並返回returncode屬性。
wait()
等待子程序結束。設定並返回returncode屬性。
communicate(input=none)
與子程序進行互動。向stdin傳送資料,或從stdout和stderr中讀取資料。可選引數input指定傳送到子程序的引數。communicate()返回乙個元組:(stdoutdata, stderrdata)。注意:如果希望通過程序的stdin向其傳送資料,在建立popen物件的時候,引數stdin必須被設定為pipe。同樣,如果希望從stdout和stderr獲取資料,必須將stdout和stderr設定為pipe。
send_signal(signal)
向子程序傳送訊號。
popen.terminate()
停止(stop)子程序。在windows平台下,該方法將呼叫windows api terminateprocess()來結束子程序。
kill()
殺死子程序。
stdin
如果在建立popen物件時,引數stdin被設定為pipe,popen.stdin將返回乙個檔案物件用於策子程序傳送指令。否則返回none。
stdout
如果在建立popen物件時,引數stdout被設定為pipe,popen.stdout將返回乙個檔案物件用於策子程序傳送指令。否則返回none。
stderr
如果在建立popen物件時,引數stdout被設定為pipe,popen.stdout將返回乙個檔案物件用於策子程序傳送指令。否則返回none。
pid獲取子程序的程序id。
returncode
獲取程序的返回值。如果程序還沒有結束,返回none。
開啟乙個shell
from subprocess import *
proc = popen("/bin/sh", shell=true)
proc.wait()
#等待子程序結束,不加這句子程序會和主程式並行執行,產生阻塞
執行ls -l命令from subprocess import *
proc = popen("ls -l",shell=true)
與子程序進行互動
向stdin中傳送資料,並從stdout,stderr中獲取資料
from subprocess import *
proc = popen("cat",stdin=pipe,stdout=pipe)
print proc.communicate(input="233\n")
# out => ('233\n', none)
Python subprocess模組學習總結
從python 2.4開始,python引入subprocess模組來管理子程序,以取代一些舊模組的方法 如 os.system os.spawn os.popen popen2.commands.不但可以呼叫外部的命令作為子程序,而且可以連線到子程序的input output error管道,獲取...
Python subprocess模組學習總結
從python 2.4開始,python引入subprocess模組來管理子程序,以取代一些舊模組的方法 如 os.system os.spawn os.popen popen2.commands.不但可以呼叫外部的命令作為子程序,而且可以連線到子程序的input output error管道,獲取...
Python subprocess模組學習總結
從python 2.4開始,python引入subprocess模組來管理子程序,以取代一些舊模組的方法 如 os.system os.spawn os.popen popen2.commands.不但可以呼叫外部的命令作為子程序,而且可以連線 到子程序的input output error管道,獲...