2016-11-03 8 views
0

私はPythonスクリプト(script2.pyと呼ぶ)を実行するためにPythonのsubprocessを使用しています。そのスクリプトはPIPEを使用してリダイレクトされるstdoutに情報を印刷しています。問題は、script2.pyは情報の印刷を停止しますが、バックグラウンドで実行し続けることです。私が望むのは、その状態を検出することです(stdoutには何も書き込まれません)。そうする方法はありますか?stdoutにデータがあるかどうかを検出する方法は?

私は次のようにこの動作をシミュレートすることができます

for i in range(0,1000): 
    if i < 500: 
     print "HUEHUE" 

script2.pyは、次の500回の反復を何も起こりませんし、それは私がスクリプトを再実行するために検出するために、必要なものです。

+0

スクリプトをインポートして実行するときにサブプロセスを使用する理由は何ですか? –

+0

@ cricket_007これは理想的な解決策ですが、書いていないスクリプトを使って作業している場合があります。出力を処理してスクリプトとやり取りする方が簡単です。もし彼がそれを自分で書いたら、私はあなたに完全に同意します。 – bravosierra99

+0

Unfortunatelly 'script2.py'は私によって書かれていませんでした。' pause '状態を検出する 'script2.py'を実行しているスクリプトのみが与えられました。 –

答えて

0

Popen.stdout stdout引数がPIPEの場合、この属性は子プロセスの出力を提供するファイルオブジェクトです。それ以外の場合はNoneです。

python documentation

だからあなたはおそらく、あなたが最初の出力が行われるように、あなたのプロセスを検討する前待機までの時間の量を決定する必要があります。したがってproc.stdout.readline()次に睡眠(1)リンスして繰り返します。

+0

実際には 'script2.py'は13分間実行されなければなりませんが、その13分のどこかに' script2.py'が失敗し、最初からやり直す必要があります。だからこそ、私はその状態を検出し、最初からそれを実行して時間を節約する必要があります。 –

+0

これはまったく異なる質問です。 subprocess.check-callを実行すると、スクリプトが実行され、戻り値が0以外の場合は例外がスローされます。あなたはそれを捕まえて、必要に応じてスクリプトを再実行することができます – bravosierra99

関連する問題