2

を使用してsubprocess.Popen()、時間がかかるはずのプロセスを起動しています。ただし、起動直後にプロセスが失敗する可能性があります (リターン コード が生成されます1)。その場合は、失敗をインターセプトして、ユーザーに説明メッセージを表示したいと考えています。プロセスを「リッスン」し、失敗した場合に応答する方法はありますか? Popen.wait()私のpythonプログラムは実行し続けなければならないので、私はただ使うことはできません。

私が現在行っているハックはtime.sleep()、Python プログラムに対して 0.5 秒間行うことです (サブプロセスが失敗する場合、サブプロセスが失敗するのに十分な時間であるはずです)。Python プログラムが再開した後、サブプロセスをポーリングして、失敗したかどうかを判断します。

より良い解決策はスレッドとを使用する可能性があると思いますPopen.wait()が、私はPythonの比較的初心者です。

編集:サブプロセスは、私が起動しているJavaデーモンです。デーモンの別のインスタンスがシステムですでに実行されている場合、Java サブプロセスはリターン コード 1 で終了します。私は乱雑な Java 例外スタック トレースをインターセプトし、わかりやすいエラー メッセージをユーザーに表示したいと考えています。

4

1 に答える 1

1

2 つのアプローチ:

  • 自分で提案したようにスレッドで呼び出しPopen.wait()、終了コードがゼロ以外の場合はエラーハンドラー関数を呼び出します。アプリケーションにイベント ループがある場合は、できればエラー メッセージをメイン スレッドにディスパッチして、エラー ハンドラがスレッド セーフであることを確認してください。
  • pyevなどの子プロセスの監視を既にサポートしているイベント ループを使用するように、アプリケーションを書き直します。1 つのサブプロセスだけを監視したい場合、これはおそらくやり過ぎです。
于 2012-09-03T22:21:12.573 に答える