在python调用树中捕获输出
我有2个python3脚本,它们形成了一个调用树,如下所示:在python调用树中捕获输出,python,python-3.x,subprocess,Python,Python 3.x,Subprocess,我有2个python3脚本,它们形成了一个调用树,如下所示: operation.py-->wrapper.py-->shell脚本 根据应用程序逻辑,operation.py将以某种顺序调用各种包装器脚本 在我尝试从shell脚本捕获错误输出并将其传递回operation.py之前,一切正常 在wrapper.py中,我有以下内容: outputs = subprocess.check_output( \ [cmd], \ universal_newl
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)
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将处理任何错误
在operation.py中,我有以下内容:
outputs = subprocess.check_output( \
[cmd], \
universal_newlines=True, \
shell=True \
)
print(outputs)
exit(0)
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?如果有左括号(或括号或花括号),则不需要在行尾加反斜杠。这不是一个错误,但阅读起来很难。我还没有尝试过你的案例,但我看到的所有示例都有
stdout=subprocess.PIPE
。这可能是个问题吗?