这是按清洁度递减的顺序 抑制 输出的方法。他们假设您使用的是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 subprocesswith open(os.devnull, ‘w’) as devnull:
subprocess.run([‘ls’, ‘-l’], stdout=devnull)
以下是按清洁度递减的顺序 捕获 输出(以供以后使用或解析)的方法。他们假设您使用的是Python 3。
如果您只是想同时捕获STDOUT和STDERR,并且您使用的是Python> = 3.7,请使用
capture_output=True
。import subprocess
result = subprocess.run([‘ls’, ‘-l’], capture_output=True)
print(result.stdout)
print(result.stderr)您可以用来
subprocess.PIPE
独立捕获STDOUT和STDERR。这 确实 对Python版本<3.7,如Python 3.6的工作。import subprocess
result = subprocess.run([‘ls’, ‘-l’], stdout=subprocess.PIPE)
print(result.stdout)To also capture stderr…
result = subprocess.run([‘ls’, ‘-l’], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
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)
print(result.stdout)
注意
:默认情况下,捕获的输出返回为
bytes。如果要捕获为文本(例如
str),请使用
universal_newlines=True(或在Python>
= 3.7上,使用无限清晰和易于理解的选项
text=True-相同,
universal_newlines但名称不同)。



