Python 中的 subprocess.check_output

Manav Narula 2022年5月18日
Python 中的 subprocess.check_output

subprocess 模組是 Python 的一個組成部分,有助於實現並行程式設計。該模組可以生成新程序並使用命令列工具控制的程式。

它儲存了不同的函式,可以幫助我們通過命令列工具執行命令。一個這樣的函式是 Python 中的 subprocess.check_output() 函式。

本教程將演示 Python 中的 subprocess.check_output() 函式。

在 Python 中使用 subprocess.check_output()

這個函式是在 Python 2.7 中引入的。我們可以使用它在命令提示符下執行帶有 Python 引數的命令。

subprocess.check_output() 函式將以位元組形式返回給定命令的輸出。如果函式返回非零程式碼,則會引發 CalledProcessError 物件。

CalledProcessError 物件有兩個屬性。這些是 returncodeoutput 屬性。

該函式的一個簡單示例如下所示。

import subprocess

print(subprocess.check_output(["echo", "Sample Message"], shell=False))

輸出:

b'Sample Message\n'

我們在上面的例子中執行 echo 命令來顯示一條訊息。返回的輸出是帶有所需訊息的位元組字串。

這個函式有幾個引數。如命令中所見,我們可以在函式中為命令提供其引數。

除此之外,我們還有 stdinstderrshelluniversal_newlines 引數。

前三個引數是標準輸入、輸出和錯誤檔案控制代碼。我們可以將它們的值指定為 PIPE 物件。

如前所述,subprocess 模組建立新的子程序。PIPE 常量從父程序傳送或接收資訊。

shell 引數可以是 TrueFalse。如果設定為 True,該命令將通過 shell 執行。

但是,不建議通過 Python 通過 shell 執行命令。當從不受信任的來源讀取輸入時,這可能會帶來嚴重的安全風險,這可能會引發 shell 注入等安全威脅。

如果 shell 引數設定為 True,我們可以使用 pipes.quotes() 函式在傳遞的字串中轉義 shell 的空格和元字元。

universal_newlines 引數設定為 True,然後作為標準輸入、輸出和錯誤提供的物件以文字模式開啟。在其他函式中,相同的引數與具有 text 引數名稱的別名一起使用。

Python 3.5 引入了一個名為 subprocess.run() 的新函式。這個函式比傳統的 subprocess.check_output() 方法執行命令更受歡迎;它返回一個 CompletedProcess 物件。

subprocess.run() 函式也接受許多引數,其中大部分在 subprocess.check_output() 方法中不可用。大多數這些引數都是通過介面傳遞的。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相關文章 - Python Subprocess