Python子进程抑制stdout和stderr

时间:2015-01-08 00:42:40

标签: python

我使用子进程模块调用外部二进制文件:

try:
    subprocess.check_output([param1, param2], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    print(e.output)

这会在check_output运行时和except语句中输出错误。 我真正想要的是仅在我捕获异常时打印输出这意味着我想在异常对象中使用stderr。

问题是如果我压制stdout:

subprocess.check_output(..., stdout=open(sys.os.devnull, 'wb'))

然后e.output肯定变空了。我也尝试将stderr设置为None - 效果相同。

如何将stderr添加到subprocess.CalledProcessError个实例,而不将stderr重定向到stdout,因为我根本不需要stdout

1 个答案:

答案 0 :(得分:2)

check_output是功能有限的便利功能。如果它没有做你想做的事,请自己动手:

proc = subprocess.Popen([param1, param2],
    stderr=subprocess.PIPE)
out, err = proc.communicate()
if proc.returncode != 0:
    print(err)
相关问题