Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python调用树中捕获输出_Python_Python 3.x_Subprocess - Fatal编程技术网

在python调用树中捕获输出

在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

我有2个python3脚本,它们形成了一个调用树,如下所示:
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
。这可能是个问题吗?