Python 子进程抑制 stdout 和 stderr
Python subprocess supress stdout and stderr
我使用子进程模块调用外部二进制文件:
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
重定向到 stdout
的情况下将 stderr
添加到 subprocess.CalledProcessError
实例,因为我根本不需要 stdout
。
check_output
是一个功能有限的便捷函数。如果它不能满足您的要求,请自己动手:
proc = subprocess.Popen([param1, param2],
stderr=subprocess.PIPE)
out, err = proc.communicate()
if proc.returncode != 0:
print(err)
我使用子进程模块调用外部二进制文件:
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
重定向到 stdout
的情况下将 stderr
添加到 subprocess.CalledProcessError
实例,因为我根本不需要 stdout
。
check_output
是一个功能有限的便捷函数。如果它不能满足您的要求,请自己动手:
proc = subprocess.Popen([param1, param2],
stderr=subprocess.PIPE)
out, err = proc.communicate()
if proc.returncode != 0:
print(err)