這篇文章帶給大家的內容是關於python中subprocess類與常數的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
常數
subprocess.DEVNULL:可傳遞給stdin, stdout, stderr參數的特殊值,意味著將使用特殊檔案os.devnull重定向輸入輸出
subprocess .PIPE:可傳遞給stdin, stdout, stderr參數的特殊值,意味著使用管道重定向輸入輸出
subprocess.STDOUT:可傳遞給stderr參數的特殊值,表示重定向標準錯誤到標準輸出
Popen
在一個新的行程中執行子程式。
建構參數
(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.
args:字串或序列。如果是序列,則args中的第一個元素是要執行的程式;如果是字串,解釋執行與平台有關,在POSIX系統args將被解釋為要執行的程式的名稱或路徑(前提是不傳遞任何參數給程序)。
shell:指定是否使用shell作為要執行的程式。如果設定為True,則更推薦和字串類型的args參數使用。
在POSIX系統,shell=True預設使用/bin/sh
作為shell。如果args為字串,則字串表示要透過shell執行的命令;如果args為序列,第一個元素指定要執行的程序,則其他元素視為參數。
在Windows系統,shell=True預設使用COMSPEC
環境變數指定的shell,一般是C:\WINDOWS\system32\cmd.exe
。唯一需要指定shell=True的場景是要執行的指令是shell內建的,如dir
, copy
。
bufsize:建立stdin/stdout/stderr管道檔案物件時作為對應的參數傳遞給open()
函數。
0:不始用緩衝
1:使用行緩衝
其他正整數:緩衝大小
負整數(預設):使用系統預設值
executable: 使用shell=True的場景很少。 shell=True時,在POSIX系統上此參數表示指定一個新的shell程式取代預設shell/bin/sh
。
stdin/stdout/stderr:分別指定程式執行的標準輸入,標準輸出,標準錯誤。可選值包括PIPE
,DEVNULL
,已存在的檔案描述符(正整數),已存在的檔案對象,None。子進程檔案句柄繼承自父進程。除此之外,stderr還可以是STDOUT
,表示標準錯誤輸出重定向到標準輸出。
preexec_fn:限於POSIX系統,設定一個可呼叫對象,先於子程序中的程式執行。
close_fds:如果為False,檔案描述子遵循Inheritance of File Descriptors中所述的inheritable
識別。
如果為True,在POSIX系統下,在子程序執行前關閉除0,1,2外的檔案描述子。
pass_fds:限於POSIX,可選的檔案描述子序列,用於在父子進程間保持開放。只要提供了此參數,close_fds強制設為True。
cwd:在子程序執行前改變工作目錄為cwd,可以是字串或path-like物件。
restore_signals:限於POSIX,略
start_new_session:限於POSIX,略
env: dict對象,為新進程定義環境變量,取代繼承自父進程的變數。在Windows下,要執行side-by-side assembly
必須包含可用的環境變數SystemRoot
。 如果指定了env,就必須提供程式執行依賴的所有環境變數
encoding/errors/text/universal_newlines:stdin/stdout/stderr預設以二進位模式打開。但如果指定了encoding/errors或text為True,將使用指定的encoding和errors以文字模式開啟stdin/stdout/stderr。 universal_newlines參數等同於text,用於後向相容。
startupinfo:只限於Windows,略
creationflags:只限於Windows,略
方法
#poll():檢查子程序是否終止。傳回None表示未終止,否則設定returncode屬性並回傳。
wait(timeout=None):如果子程序在timeout後沒有終止,拋出TimeoutExpired異常。否則設定returncode屬性並回傳。
communicate(input=None, timeout=None):進程互動:傳送資料到stdin,讀取stdout或stderr的資料知道讀取到結束符號。傳回(stdout_data, stderr_data)形式的元組,元組類型是string或byte。
input為None或要傳送到子程序的數據,根據stream開啟模式的不同,可以是string或byte類型。
如果要和進程的stdin交互,創建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):傳送訊號到子程序
terminate():終止子程序。 POSIX系統上,發送SIGTERM訊號到子程序,Windows系統上會呼叫TerminateProcess()終止程序
kill():強制終止子程序。 POSIX系統上,傳送SIGKILL訊號到子進程。 Windows系統上kill()是terminate()的別名
屬性
#args:傳入Popen
建構器的第一個參數, list或string類型
stdin:如果傳遞給Popen的stdin參數是PIPE,該屬性表示string或byte類型的可寫stream物件。如果傳遞給Popen的stdin參數不是PIPE,此屬性值為None
stdout:與Popen.stdin相近,但stream物件是可讀的
#stderr:與Popen.stdout相近
pid:子進程進程號。如果設定了shell=True,pid表示派生shell的進程號
returncode:子程序回傳碼,None表示進程未終止。負數-N表示進程被訊號N終止(僅限POSIX)。
run()
函數執行的回傳值,表示程式執行完成。
屬性
args:傳入run()
函數的第一個參數,list或string類型
returncode:子程序退出碼。如果為負數,表示進程因為某個訊號退出
stdout:捕獲的子程序的標準輸出,預設為byte類型,如果run()
函數調用時指定了encoding或errors,或設定了text=True則為string類型。如果未捕獲標準輸出返回None
stderr:捕獲的子程序的標準錯誤,則預設為byte類型,如果run()
函數呼叫時指定了encoding或errors,或設定了text=True則為string類型。如果未擷取標準錯誤回傳None
方法
check_returncode():如果returncode非0,拋出CalledProcessError
cmd:
指令#timeout:
秒為單位的時間 output:run()
或
check_output()
stdout:
output屬性別名稱stderr:run()
check_call()
或
check_output()
returncode:
子程序退出碼。若為負數,表示行程因為某個訊號退出cmd:
同TimeoutExpiredoutput:
同TimeoutExpired#stdout:
同TimeoutExpiredstderr:
同TimeoutExpired本篇文章到這裡就已經全部結束了,更多其他精彩內容可以追蹤PHP中文網的python影片教學
欄位!以上是python中subprocess類別與常數的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!