在 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() 捕获异常输出?

当父进程死亡时,如何杀死使用 subprocess.check_output() 创建的 python 子进程?

了解python subprocess.check_output的第一个参数和shell = True [重复]