subprocess是Python與系統交互的一個庫,該模塊允許生成新進程,連接到它們的輸入/輸出/錯誤管道,並獲取它們的返回代碼。
該模塊旨在替換幾個較舊的模塊和功能:
os.system
os.spawn
os.popen
popen2
commands
相關函數
subprocess.call(args,*,stdin = None,stdout = None,stderr = None,shell = False )
運行args描述的命令。等待命令完成,然后返回returncode屬性
subprocess.check_call(args,*,stdin = None,stdout = None,stderr = None,shell = False )
使用參數運行命令並將其輸出作為字節字符串返回。如果返回碼非零,則會引發 CalledProcessError
subprocess.check_output(args,*,stdin = None,stderr = None,shell = False,universal_newlines = False )
使用參數運行命令並將其輸出作為字節字符串返回。如果返回碼非零,則會引發 CalledProcessError
subprocess.PIPE
可用作stdin,stdout或stderr參數的特殊值,Popen表示應打開標准流的管道
subprocess.STDOUT
可用作stderr參數的特殊值,Popen表示標准錯誤應與標准輸出位於同一句柄中。
subprocess.STDOUT
可用作stderr參數的特殊值,Popen表示標准錯誤應與標准輸出位於同一句柄中。
參數介紹
args: 要執行的shell命令程序
stdin:執行程序的標准輸入,默認值為None
stdout:執行程序的標准輸出,默認值為None
stderr:執行程序標准錯誤文件句柄,默認值為None
shell:如果該參數值為True,則將通過shell執行指定的命令
universal_newlines:如果該參數值為True,則該文件對象的stdin,stdout和stderr將會作為文本流被打開,否則他們將會被作為二進制流被打開
subprocess.Popen
subprocess模塊中的基礎流程創建和管理都是由 Popen 類處理。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:是一系列程序參數或者是一個單獨的字符串
bufsize:如果給定,與內置open()函數的相應參數具有相同的含義:0表示無緩沖,1表示行緩沖,任何其他正值表示使用(大約)該大小的緩沖區。負值表示使用系統默認值,這通常意味着完全緩沖。bufsize的默認值是0(unbuffered)
stdin,stdout,stderr:分別指定執行程序的標准輸入,標准輸出和標准錯誤文件句柄
preexec_fn:如果設置為可調用對象,則在執行子進程之前,將在子進程中調用此對象(僅限Unix)
close_fds:如果為True,所有的文件描述符除外0,1並 2執行子進程之前,將被關閉(僅限Unix)
cwd:如果不是None,則子進程的當前目錄在執行之前將更改為cwd的值
env:如果不是None,則它必須是定義新進程的環境變量的映射,如果env=None,那么子進程的環境變量將從父進程中繼承
universal_newlines: 如果該參數值為True,則該文件對象的stdin,stdout和stderr將會作為文本流被打開,否則他們將會被作為二進制流被打開
startupinfo:如果給定,將是一個STARTUPINFO對象,它將傳遞給底層CreateProcess函數(僅限Windows)
creationflags:如果給出,可以是CREATE_NEW_CONSOLE或 CREATE_NEW_PROCESS_GROUP(僅限Windows)
Popen類的方法
Popen.poll()
檢查子進程是否已終止。設置並返回 returncode屬性。
Popen.wait()
等待子進程終止。設置並返回 returncode屬性。
Popen.communicate(input=None)
與進程交互:將數據發送到stdin。從stdout和stderr讀取數據,直到達到文件結尾。返回一個元組(stdoutdata, stderrdata)
Popen.send_signal(signal)
將信號信號發送給子進程。
Popen.terminate()
停止子進程
Popen.kill()
殺了子進程
Popen類的屬性
Popen.stdin
如果stdin的參數是subprocess.PIPE,則此屬性是一個文件對象,它為子進程提供輸入。否則就是None。
Popen.stdout
如果stdout的參數是subprocess.PIPE,則此屬性是一個文件對象,它提供子進程的輸出。否則就是None。
Popen.stderr
如果stderr的參數是subprocess.PIPE,則此屬性是一個文件對象,它提供子進程的錯誤輸出。否則就是None。
Popen.pid
子進程的進程ID。
Popen.returncode
子進程的返回碼,通過設置poll()和wait()(或間接的communicate())。一個None值表示進程尚未結束。負值-N表示該子進程被信號終止 (僅限Unix)。