我使用子流程来运行脚本。但是那个被称为脚本的脚本本身使用子进程来执行一些命令。问题是,当我在外部脚本中捕获异常时,它只是说被调用的脚本中有错误。
所以,我的问题是如何将错误从内部脚本传播到外部脚本,以便我知道内部脚本中发生的确切原因。
这是我通过子进程捕获异常并在错误时退出的方式。
try:
output = subprocess.check_output(cmd)
except Exception as e:
print(str(e))
sys.exit(1)
答案 0 :(得分:1)
如果使用subprocess
python模块,则可以分别处理STDOUT,STDERR和命令的返回代码。您可以看到完整的命令调用程序实现的示例。当然,您可以根据需要使用try..except
对其进行扩展。
下面的函数返回STDOUT,STDERR和Return代码,以便您可以在其他脚本中处理它们。
import subprocess
def command_caller(command=None)
sp = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=False)
out, err = sp.communicate()
if sp.returncode:
print(
"Return code: %(ret_code)s Error message: %(err_msg)s"
% {"ret_code": sp.returncode, "err_msg": err}
)
# You can raise an error if the return code of command is not zero.
# raise Exception(
# "Return code: %(ret_code)s Error message: %(err_msg)s"
# % {"ret_code": sp.returncode, "err_msg": err}
# )
return sp.returncode, out, err