python subprocess模組 學習筆記

2021-07-24 09:18:34 字數 2955 閱讀 6568

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管道,獲...