捕获python调用树中的输出

时间:2012-04-20 18:23:03

标签: python python-3.x subprocess

我有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?

0 个答案:

没有答案