我使用子进程模块调用外部二进制文件:
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
。
答案 0 :(得分:2)
check_output
是功能有限的便利功能。如果它没有做你想做的事,请自己动手:
proc = subprocess.Popen([param1, param2],
stderr=subprocess.PIPE)
out, err = proc.communicate()
if proc.returncode != 0:
print(err)