这里是如何抑制输出,按清洁度递减的顺序。他们假设您使用的是 Python 3。
- 您可以重定向到特殊的
subprocess.DEVNULL 目标。
import subprocess
subprocess.run(['ls', '-l'], stdout=subprocess.DEVNULL)
# The above only redirects stdout...
# this will also redirect stderr to /dev/null as well
subprocess.run(['ls', '-l'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
# Alternatively, you can merge stderr and stdout streams and redirect
# the one stream to /dev/null
subprocess.run(['ls', '-l'], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
- 如果你想要一个完全手动的方法,可以通过自己打开文件句柄重定向到
/dev/null。其他一切都与方法 #1 相同。
import os
import subprocess
with open(os.devnull, 'w') as devnull:
subprocess.run(['ls', '-l'], stdout=devnull)
这里是如何捕获输出(以供以后使用或解析),按照清洁度递减的顺序。他们假设您使用的是 Python 3。以下示例使用 text=True(仅限 Python >= 3.7,在 Python universal_newlines=True,这与 Python 相同,但输入更冗长)将输出返回为 @987654328 @ 而不是 bytes - 省略 text=True/universal_newlines=True 以获取 bytes 数据。
- 如果您只想独立捕获 STDOUT 和 STDERR,并且您使用的是 Python >= 3.7,请使用
capture_output=True。
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
print(result.stderr)
- 您可以使用
subprocess.PIPE 独立捕获STDOUT 和STDERR。这适用于支持subprocess.run 的任何版本的 Python。
import subprocess
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, universal_newlines=True)
print(result.stdout)
# To also capture stderr...
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
print(result.stdout)
print(result.stderr)
# To mix stdout and stderr into a single string
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
print(result.stdout)