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