當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python subprocess.run用法及代碼示例


用法:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, **other_popen_kwargs)

運行 args 說明的命令。等待命令完成,然後返回 CompletedProcess 實例。

上麵顯示的參數隻是最常見的參數,在下麵的常用參數中進行了說明(因此在縮寫簽名中使用僅關鍵字表示法)。完整的函數簽名與 Popen 構造函數的簽名大致相同 - 此函數的大多數參數都傳遞給該接口。 (timeoutinputcheckcapture_output 不是。)

如果capture_output 為真,將捕獲標準輸出和標準錯誤。使用時,內部 Popen 對象會使用 stdout=PIPEstderr=PIPE 自動創建。 stdoutstderr 參數不能與 capture_output 同時提供。如果您希望捕獲兩個流並將其合並為一個,請使用 stdout=PIPEstderr=STDOUT 而不是 capture_output

timeout 參數傳遞給 Popen.communicate() 。如果超時,子進程將被殺死並等待。 TimeoutExpired 異常將在子進程終止後重新引發。

input 參數被傳遞給Popen.communicate(),從而傳遞給子進程的標準輸入。如果使用它必須是字節序列,或者如果指定了encodingerrorstext 為真,則為字符串。使用時,內部 Popen 對象會使用 stdin=PIPE 自動創建,也可能不會使用 stdin 參數。

如果check 為真,並且進程以非零退出代碼退出,則會引發CalledProcessError 異常。該異常的屬性包含參數、退出代碼以及標準輸出和標準錯誤(如果它們被捕獲)。

如果指定了encodingerrors,或者text 為真,則stdin、stdout 和stderr 的文件對象將使用指定的encodingerrorsio.TextIOWrapper 默認值以文本模式打開。 universal_newlines 參數等效於text 並提供向後兼容性。默認情況下,文件對象以二進製模式打開。

如果 env 不是 None ,則必須是為新進程定義環境變量的映射;這些用於代替繼承當前進程環境的默認行為。它直接傳遞給 Popen

例子:

>>> subprocess.run(["ls", "-l"])  # doesn't capture output
CompletedProcess(args=['ls', '-l'], returncode=0)

>>> subprocess.run("exit 1", shell=True, check=True)
Traceback (most recent call last):
  ...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

>>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True)
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')

3.5 版中的新函數。

在 3.6 版中更改:添加encodingerrors參數

在 3.7 版中更改:添加了text參數,作為更易於理解的別名universal_newlines.添加了capture_output範圍。

相關用法


注:本文由純淨天空篩選整理自python.org大神的英文原創作品 subprocess.run。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。