我有 2 个python 3脚本,它们形成一个调用树,如下所示:
operation.py --> wrapper.py --> shell script
取决于应用程序逻辑 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
现在根据文档,如果我想捕获输出,我stderr=subprocess.STDOUT
在 operation.py 中的调用中添加:这确实捕获了错误输出,但它会导致wrapper.py 中的一些调用挂起并且什么也不返回。一些 shell 脚本工作正常,但其他的永远不会返回。一些调试显示被调用的 shell 脚本正常退出,并且 wrapper.py 正常退出,但 operation.py 无法识别。
如何捕获错误输出并在脚本完成时始终返回到 operation.py?