2

を使用して、Python から C++ バイナリ アプリケーションを実行していますsubprocess.Popen。このプロセスの中止を処理するにはどうすればよいですか? たとえば、私の c++ はアサーションで中断し、コンソールに次のように表示されます。

binary: /usr/include/.../file.hpp:42: Assertion `min <= max' failed.
Aborted

プロセスは閉じますが、popen ハンドルを使用して Python でこれをキャッチするにはどうすればよいですか?

4

2 に答える 2

1

に電話した場合handle = subprocess.Popen(...)は、ある時点でに電話する必要がありますhandle.wait()。その戻り値は、同時にreturncodeプロセスハンドルオブジェクトの属性であり、プロセスが正常に完了したか(値> = 0)、またはシグナルが原因で停止したか(値<0)を示します。

例:

>>> import subprocess
>>> subprocess.call("kill -ABRT $$", shell=True)
-6
>>> a = subprocess.Popen("kill -ABRT $$", shell=True)
>>> a.wait()
-6
>>> subprocess.call("kill -SEGV $$", shell=True)
-11

次のようなCプログラムで

#include <assert.h>

int main() {
    assert(0);
}

できます

>>> import subprocess
>>> subprocess.call(["./ass"])
ass: ass.c:4: main: Assertion `0' failed.
-6

だから私は同じ効果があります。

于 2012-06-27T14:14:58.793 に答える
1

あなたは信号をキャッチすることができますSIGABRT。ただし、シグナルハンドラーが終了した後は、それ以上クラッシュせずに続行できない場合があることに注意してください。

ただし、アサーションが失敗する原因となっているものはすべて修正することをお勧めします。

于 2012-06-27T13:34:18.457 に答える