Python 3.2 と次のコード スニペットを使用します。
p = subprocess.Popen(['../start_server.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = p.communicate()
if out != None :
out = out.decode('utf-8')
if err != None :
err = err.decode('utf-8')
print('out ',out)
print('err ',err)
一部のシェル スクリプトでは問題なく動作し、出力が得られます。他の人ではただハングします。ただし、いずれの場合も、シェル スクリプトはコマンド ラインからエラーなしで実行されます。私が見ることができる唯一の共通点は、(通常)ハングするものの出力がゼロであることです。何かが失敗した場合、実行中のプロセスを確認すると、シェルスクリプトがリストされておらず、Python スクリプトがまだ実行されていることがわかります
シェルスクリプトを呼び出して、常に制御を Python プログラムに戻す信頼できる方法は何ですか?
編集:
パイプ Popen などを使用する必要はありません。唯一の要件は、シェル スクリプトが終了したときに、制御が Python スクリプトに返されることです。シェル スクリプトがコマンド プロンプトに戻らない場合、私の python スクリプトも戻らないでしょう。
呼び出しているシェル スクリプトが常にコマンド プロンプトに戻ると仮定すると、どうすれば制御を Python プログラムに戻すことができますか?
上記の方法よりも良い方法があれば、教えてください
もう 1 つ見つかったのは、「ハング」したシェル スクリプトが「nohup」の呼び出しで終了しているように見えることです。問題なくコマンド プロンプトに戻ります。