2011-07-21 7 views
1

サブプロセスがそのジョブを終了したかどうかを確認する方法はありますか?私のpythonスクリプトはcmdから123.exeを実行します。 123.exeはいくつか行い、最終的に1または0をtxtファイルに書き出します。 Pythonスクリプトはtxtファイルを読み込み、 '1'の場合はジョブを続行し、 '0'の場合は停止します。私が考えることができるすべての時点で、pythonスクリプトを1分間寝かせることです。そうすれば、123.exeは1または0をtxtファイルに書き込むことが最も確実です。この実現は非常に簡単ですが、同時に愚かです。2番目のスクリプトがそのジョブを完了した後、Pythonスクリプトが別のスクリプトを実行して再開します

私の質問はタイムアウトを必要とせずにこの問題に対処する方法ですか? Pythonスクリプトを123.exeが終了するまで待つ方法を教えてください。プロセスが完了するまで、これが待機すると、あなたのスクリプトはここから継続されます

p = subprocess(...) 
os.waitpid(p.pid, 0) 

答えて

3

用途:

retcode = subprocess.call(["123.exe"]) 

これは、コマンドを実行し、それが終了するまで待って、あなたがretcodeにそのリターンコードを取得する場合(この方法は、あなたがまた、出力状態のファイルをチェックする必要性を避けることができコマンドは適切な戻りコードを戻します)。

あなたが

Popen.wait() 

のために行く、手動subprocess.Popenインスタンス化する必要がある場合(そしてPopen.returncodeを確認してください)。

0

はこれを試してみてください。

+1

サブプロセス自体がこの機能を提供しているので、 'os.waitpid()'を使う必要はありません。 – redShadow

+0

@redShadowそうです。 – Woltan

1

サブプロセスモジュールの略語call()を使用します。ドキュメントから:

引数を指定してコマンドを実行します。コマンドが完了するまで待ってから、 returncode属性を返します。当然の

import subprocess 
retcode = subprocess.call(["123.exe"]) 

あなたはretcodeを使用しませんが、123.exeが終了するまで、あなたのスクリプトは、とにかくハングします:

それはこのように動作する必要があります。

関連する問題