我有2个 python 3 脚本,形成一个如下所示的调用树:
operation.py - > wrapper.py - > shell脚本
取决于应用程序逻辑,operation.py将按某种顺序调用各种包装脚本。
一切正常,直到我尝试从shell脚本捕获错误输出并将其传递回operation.py
在wrapper.py中我有这个:outputs = subprocess.check_output( \
[cmd], \
universal_newlines=True, \
shell=True \
)
print(outputs)
exit(0)
注意缺少异常处理 - 这是故意的。 Operation.py将处理任何错误
在operation.py我有这个:
try :
os.chdir(loc[1])
outputs = subprocess.check_output( \
['python3.2','wrapper.py', various arguments...], \
universal_newlines=True \
)
logging.info('Output from %s OperationScript.py', loc[1])
logging.info(outputs)
......
except .... :
error handling code here
现在根据文档,如果我想捕获输出,我在operation.py的调用中添加:stderr=subprocess.STDOUT
。这确实捕获了错误输出,但是它会导致wrapper.py中的一些调用挂起并且什么都不返回。一些shell脚本工作正常,但其他人永远不会返回。一些调试显示正在调用的shell脚本正常退出,而wrapper.py正常退出,但是operation.py无法识别。
如何捕获错误输出 AND 在脚本完成时始终返回到operation.py?