在 subprocess.check_output() 中抑制 stderr
Posted
技术标签:
【中文标题】在 subprocess.check_output() 中抑制 stderr【英文标题】:Suppress stderr within subprocess.check_output() 【发布时间】:2015-10-19 10:09:00 【问题描述】:我正在尝试找到一种方法来忽略标准错误流(类似于2> /dev/null
):
output = subprocess.check_output("netstat -nptl".split())
我应该在上面的命令中添加什么来实现这一点?
【问题讨论】:
相关:How to hide output of subprocess in Python 2.7 除了具体的方法(call
vs check_output
),上面几乎是重复的。
【参考方案1】:
只需告诉subprocess
为您重定向:
import subprocess
output = subprocess.check_output(
"netstat -nptl".split(), stderr=subprocess.DEVNULL
)
对于 python 2,它有点冗长。
import os
import subprocess
with open(os.devnull, 'w') as devnull:
output = subprocess.check_output(
"netstat -nptl".split(), stderr=devnull
)
【讨论】:
对于 Python 3:output = subprocess.check_output("netstat -nptl".split(), stderr=subprocess.STDOUT)
是正确的方法吗?
@alper:不,将标准错误重定向到标准输出。要抑制标准错误,请使用output = subprocess.check_output("netstat -nptl".split(), stderr=subprocess.DEVNULL)
从 python 3.5 开始,您还拥有subprocess.run()
,它应该用于更新的代码。 output = subprocess.run(check=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout
@gelonida:当然,但请注意,这个问题用python-2.7
标记。
@MartijnPieters 是的。我只是想,python 2.7 将变得越来越不常见,python 3 用户也可能会偶然发现这个问题。你认为我应该删除我的评论吗?以上是关于在 subprocess.check_output() 中抑制 stderr的主要内容,如果未能解决你的问题,请参考以下文章
python 逐行循环 subprocess.check_output
如何编写 subprocess.check_output 的异步版本?
Python subprocess.check_output()
如何从 Python subprocess.check_output() 捕获异常输出?