subprocess模塊詳解


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_outputargs*stdin = Nonestderr = Noneshell = Falseuniversal_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)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM