摘要:限于,可選的文件描述符序列,用于在父子進程間保持開放。如果設置了,表示派生的進程號子進程返回碼,表示進程未終止。如果未捕獲標準錯誤返回方法如果非,拋出異常異常模塊的異常基類子進程執(zhí)行超時。
常量
subprocess.DEVNULL:可傳遞給stdin, stdout, stderr參數(shù)的特殊值,意味著將使用特殊文件os.devnull重定向輸入輸出
subprocess.PIPE:可傳遞給stdin, stdout, stderr參數(shù)的特殊值,意味著使用管道重定向輸入輸出
subprocess.STDOUT:可傳遞給stderr參數(shù)的特殊值,表示重定向標準錯誤到標準輸出
Popen在一個新的進程中執(zhí)行子程序。
構造參數(shù)
(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None, text=None)
args:字符串或序列。如果是序列,則args中的第一個元素是要執(zhí)行的程序;如果是字符串,解釋執(zhí)行與平臺有關,在POSIX系統(tǒng)args將被解釋為要執(zhí)行的程序的名稱或路徑(前提是不傳遞任何參數(shù)給程序)。
shell:指定是否使用shell作為要執(zhí)行的程序。如果設置為True,更推薦和字符串類型的args參數(shù)使用。
在POSIX系統(tǒng),shell=True默認使用/bin/sh作為shell。如果args為字符串,該字符串表示要通過shell執(zhí)行的命令;如果args為序列,第一個元素指定要執(zhí)行的程序,其他元素視為參數(shù)。
在Windows系統(tǒng),shell=True默認使用COMSPEC環(huán)境變量指定的shell,一般是C:WINDOWSsystem32cmd.exe。唯一需要指定shell=True的場景是要執(zhí)行的指令是shell內(nèi)置的,如dir, copy。
bufsize:創(chuàng)建stdin/stdout/stderr管道文件對象時作為對應的參數(shù)傳遞給open()函數(shù)。
0:不始用緩沖
1:使用行緩沖
其他正整數(shù):緩沖大小
負整數(shù)(默認):使用系統(tǒng)默認值
executable:使用shell=True的場景很少。shell=True時,在POSIX系統(tǒng)上此參數(shù)表示指定一個新的shell程序替換默認shell/bin/sh。
stdin/stdout/stderr:分別指定程序執(zhí)行的標準輸入,標準輸出,標準錯誤??蛇x值包括PIPE,DEVNULL,已存在的文件描述符(正整數(shù)),已存在的文件對象,None。子進程文件句柄繼承自父進程。除此之外,stderr還可以是STDOUT,表示標準錯誤輸出重定向到標準輸出。
preexec_fn:限于POSIX系統(tǒng),設置一個可調(diào)用對象,先于子進程中的程序執(zhí)行。
close_fds:如果為False,文件描述符遵循Inheritance of File Descriptors中描述的inheritable標識。
如果為True,在POSIX系統(tǒng)下,在子進程執(zhí)行前關閉除0,1,2外的文件描述符。
pass_fds:限于POSIX,可選的文件描述符序列,用于在父子進程間保持開放。只要提供了此參數(shù),close_fds強制設為True。
cwd:在子進程執(zhí)行前改變工作目錄為cwd,可以是字符串或path-like對象。
restore_signals:限于POSIX,略
start_new_session:限于POSIX,略
env:dict對象,為新進程定義環(huán)境變量,替換繼承自父進程的變量。在Windows下,要運行side-by-side assembly必須包含可用的環(huán)境變量SystemRoot。如果指定了env,就必須提供程序執(zhí)行依賴的所有環(huán)境變量
encoding/errors/text/universal_newlines:stdin/stdout/stderr默認以二進制模式打開。但如果指定了encoding/errors或者text為True,將使用指定的encoding和errors以文本模式打開stdin/stdout/stderr。universal_newlines參數(shù)等同于text,用于后向兼容。
startupinfo:僅限于Windows,略
creationflags:僅限于Windows,略
方法
poll():檢查子進程是否終止。返回None表示未終止,否則設置returncode屬性并返回。
wait(timeout=None):如果子進程在timeout后沒有終止,拋出TimeoutExpired異常。否則設置returncode屬性并返回。
communicate(input=None, timeout=None):進程交互:發(fā)送數(shù)據(jù)到stdin,讀取stdout或stderr的數(shù)據(jù)知道讀取到結束符。返回(stdout_data, stderr_data)形式的元組,元組類型是string或byte。
input為None或要發(fā)送到子進程的數(shù)據(jù),根據(jù)stream打開模式的不同,可以是string或byte類型。
如果要和進程的stdin交互,創(chuàng)建Popen對象時需要指定stdin=PIPE。類似的,返回的tuple如果希望是非None,需要設置stdout=PIPE和/或stderr=PIPE。
如果子進程在timeout后沒有終止,拋出TimeoutExpired異常,但子進程并未kill掉,一個良好的應用應該kill掉子進程并結束交互:
proc = subprocess.Popen(...) try: outs, errs = proc.communicate(timeout=15) except TimeoutExpired: proc.kill() outs, errs = proc.communicate()
send_signal(signal):發(fā)送信號到子進程
terminate():終止子進程。POSIX系統(tǒng)上,發(fā)送SIGTERM信號到子進程,Windows系統(tǒng)上會調(diào)用TerminateProcess()終止進程
kill():強制終止子進程。POSIX系統(tǒng)上,發(fā)送SIGKILL信號到子進程。Windows系統(tǒng)上kill()是terminate()的別名
屬性
args:傳入Popen構造器的第一個參數(shù),list或string類型
stdin:如果傳遞給Popen的stdin參數(shù)是PIPE,該屬性表示string或byte類型的可寫stream對象。如果傳遞給Popen的stdin參數(shù)不是PIPE,此屬性值為None
stdout:與Popen.stdin相近,但stream對象是可讀的
stderr:與Popen.stdout相近
pid:子進程進程號。如果設置了shell=True,pid表示派生shell的進程號
returncode:子進程返回碼,None表示進程未終止。負數(shù)-N表示進程被信號N終止(僅限POSIX)。
CompletedProcessrun()函數(shù)運行的返回值,表示進程執(zhí)行完成。
屬性
args:傳入run()函數(shù)的第一個參數(shù),list或string類型
returncode:子進程退出碼。如果為負數(shù),表示進程因為某個信號退出
stdout:捕獲的子進程的標準輸出,默認為byte類型,如果run()函數(shù)調(diào)用時指定了encoding或errors,或設置了text=True則為string類型。如果未捕獲標準輸出返回None
stderr:捕獲的子進程的標準錯誤,默認為byte類型,如果run()函數(shù)調(diào)用時指定了encoding或errors,或設置了text=True則為string類型。如果未捕獲標準錯誤返回None
方法
check_returncode():如果returncode非0,拋出CalledProcessError異常
異常 subprocess.SubprocessErrorsubprocess模塊的異?;?/p> subprocess.TimeoutExpired
子進程執(zhí)行超時。
屬性
cmd:指令
timeout:秒為單位的時間
output:run()或check_output()函數(shù)捕獲到的子進程的輸出,否則為None
stdout:output屬性別名
stderr:run()函數(shù)捕獲到的子進程的錯誤輸出,否則為None
subprocess.CalledProcessErrorcheck_call()或check_output()函數(shù)返回非0狀態(tài)碼時拋出。
屬性
returncode:子進程退出碼。如果為負數(shù),表示進程因為某個信號退出
cmd:同TimeoutExpired
output:同TimeoutExpired
stdout:同TimeoutExpired
stderr:同TimeoutExpired
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/43464.html
摘要:參數(shù)將作為子進程的標準輸入傳遞給方法,必須是需要指定或參數(shù),或者設置為或類型。源碼模塊還提供了版本中模塊的相關函數(shù)。實際上是調(diào)用函數(shù),在中執(zhí)行類型的指令,返回形式的元組,包含和是使用解碼的字符串,并刪除了結尾的換行符。 subprocess.run() 運行并等待args參數(shù)指定的指令完成,返回CompletedProcess實例。 參數(shù):(*popenargs, input=None...
摘要:接下來手工實現(xiàn)了一個簡單的裝飾器原型,緊接著引入中的裝飾器語法。最后還列出了一些裝飾器的高級用法,包括給裝飾器傳遞參數(shù)等。讀完整個答案,一定能對裝飾器有較深的理解,并且知道理解裝飾器的思考過程。 作為一名程序員,如果沒有聽過 Stackoverflow,那么你最好去面壁思過一下。程序員最需要閱讀的一本編程書籍(其實編程書留下這本就夠了?。?showImg(https://segmen...
摘要:以前我一直用處理一些系統(tǒng)管理任務因為我認為那是運行命令最簡單的方式我們能從官方文檔里讀到應該用模塊來運行系統(tǒng)命令模塊允許我們創(chuàng)建子進程連接他們的輸入輸出錯誤管道,還有獲得返回值。模塊打算來替代幾個過時的模塊和函數(shù),比如命令。 以前我一直用os.system()處理一些系統(tǒng)管理任務,因為我認為那是運行l(wèi)inux命令最簡單的方式.我們能從Python官方文檔里讀到應該用subprocess...
摘要:可以執(zhí)行命令的相關模塊和函數(shù)有廢棄廢棄廢棄,中被移除以上執(zhí)行命令的相關的模塊和函數(shù)的功能均在模塊中實現(xiàn),并提供了更豐富的功能。所以不能將設置為同時重定向子進程的標準輸入輸出與錯誤。同上用于設置子進程的當前目錄用于指定子進程的環(huán)境變量。 可以執(zhí)行shell命令的相關模塊和函數(shù)有: os.system os.spawn os.popen --廢棄 popen --廢棄...
摘要:具有以下基本同步原語子進程提供了通過創(chuàng)建和管理子進程的。雖然隊列不是線程安全的,但它們被設計為專門用于代碼。表示異步操作的最終結果。 Python的asyncio是使用 async/await 語法編寫并發(fā)代碼的標準庫。通過上一節(jié)的講解,我們了解了它不斷變化的發(fā)展歷史。到了Python最新穩(wěn)定版 3.7 這個版本,asyncio又做了比較大的調(diào)整,把這個庫的API分為了 高層級API和...
閱讀 3126·2021-11-23 09:51
閱讀 1104·2021-09-02 15:21
閱讀 3069·2019-08-30 13:56
閱讀 1904·2019-08-29 14:12
閱讀 776·2019-08-29 13:53
閱讀 1748·2019-08-29 11:32
閱讀 1440·2019-08-29 11:25
閱讀 1549·2019-08-28 17:51