0

次のようなコール ツリーを形成する2 つのpython 3
スクリプトがあります: operation.py --> wrapper.py --> シェル スクリプト

アプリケーション ロジックに応じて、operation.py はさまざまなラッパー スクリプトをある順序で呼び出します。

シェル スクリプトからエラー出力をキャプチャして 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.STDOUToperation.py の呼び出しに。そして、それはエラー出力をキャプチャしますが、wrapper.py の一部の呼び出しがハングして何も返さない原因になります。一部のシェル スクリプトは正常に動作しますが、他のシェル スクリプトはまったく戻りません。一部のデバッグでは、呼び出されたシェル スクリプトは正常に終了し、wrapper.py は正常に終了しますが、operation.py はそれを認識しません。

エラー出力をキャプチャし、スクリプトの終了時に常にoperation.pyに戻るにはどうすればよいですか?

4

0 に答える 0