【问题标题】:Suppress stderr within subprocess.check_output()在 subprocess.check_output() 中抑制 stderr
【发布时间】:2015-10-19 10:09:00
【问题描述】:

我正在尝试找到一种方法来忽略标准错误流(类似于2> /dev/null):

output = subprocess.check_output("netstat -nptl".split())

我应该在上面的命令中添加什么来实现这一点?

【问题讨论】:

标签: python python-2.7 subprocess


【解决方案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 用户也可能会偶然发现这个问题。你认为我应该删除我的评论吗?
猜你喜欢
  • 1970-01-01
  • 2012-11-15
  • 2021-04-30
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
相关资源
最近更新 更多