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