【发布时间】:2015-01-08 00:42:39
【问题描述】:
我使用 subprocess 模块调用外部二进制文件:
try:
subprocess.check_output([param1, param2], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
print(e.output)
这在check_output 运行时和在except 语句中都会输出错误。
我真正想要的是仅在捕获异常时打印输出。这意味着我希望在异常对象中包含 stderr。
问题是,如果我抑制标准输出:
subprocess.check_output(..., stdout=open(sys.os.devnull, 'wb'))
然后e.output 肯定会变成空的。我还尝试将 stderr 设置为 None - 效果相同。
如何将stderr 添加到subprocess.CalledProcessError 实例而不将stderr 重定向到stdout,因为我根本不需要stdout。
【问题讨论】:
-
不要打印
e.outputid 你只想看到一次错误,subprocess.check_output([param1, param2])并使用传递而不是打印 -
这只是一个例子。在实际应用程序中,我重新引发异常,然后用于生成 jsonified 错误消息。
标签: python