3

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」の呼び出しで終了しているように見えることです。問題なくコマンド プロンプトに戻ります。

4

1 に答える 1

0

シェルスクリプトを呼び出して、常に制御を Python プログラムに戻す信頼できる方法は何ですか?

パイプを使用している場合、これはスクリプトによって異なります。より一般的な答えは、本質的に停止の問題であり、強力な StackOverflow でさえそれを助けることはできません。

発生している特定の問題を解決できるように、より深く掘り下げて再現可能なケースを作成することをお勧めします。

編集

パイプが必要ない場合は、 stdout および stderr パラメータを省略してください (または 以外の値に設定してくださいPIPE)。Python サブプロセス管理を参照してください。

于 2012-05-30T20:15:57.183 に答える