首頁  >  文章  >  後端開發  >  python中subprocess類別與常數的詳細介紹

python中subprocess類別與常數的詳細介紹

不言
不言轉載
2019-03-29 10:57:212494瀏覽

這篇文章帶給大家的內容是關於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:分別指定程式執行的標準輸入,標準輸出,標準錯誤。可選值包括PIPEDEVNULL,已存在的檔案描述符(正整數),已存在的檔案對象,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)。

CompletedProcess

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

異常

subprocess.SubprocessError

subprocess模組的例外基底類別

subprocess.TimeoutExpired

#子程式執行逾時。
屬性

cmd:

指令

#timeout:

秒為單位的時間

output:run()check_output()

函數捕獲到的子程序的輸出,否則為None

stdout:

output屬性別名稱

stderr:run()

函數捕獲到的子程序的錯誤輸出,否則為None

subprocess.CalledProcessError

check_call()check_output()

函數傳回非0狀態碼時拋出。
屬性

returncode:

子程序退出碼。若為負數,表示行程因為某個訊號退出

cmd:

同TimeoutExpired

output:

同TimeoutExpired

#stdout:

同TimeoutExpired

stderr:

同TimeoutExpired

本篇文章到這裡就已經全部結束了,更多其他精彩內容可以追蹤PHP中文網的python影片教學

欄位!


###

以上是python中subprocess類別與常數的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除