Python から C 実行可能ファイルを実行していますが、この実行可能ファイルは時々セグメンテーション違反を起こします。segfault が発生すると、サブプロセス モジュールは stdout または stderr に何も返しません。
サンプルコード:
import subprocess
proc = subprocess.Popen(['./a.out'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
print 'out: "%s"' % out
print 'err: "%s"' % err
print proc.returncode
のソースa.out
は次のとおりです。
int main() {
printf("hello world\n");
int x = 1 / 0;
}
の出力./a.out
は次のとおりです。
hello world
Floating point exception
Python コードの出力は次のとおりです (Linux では、python 2.7)。
out: ""
err: ""
-8
クラッシュしても実行可能ファイルの出力を取得する方法はありますか?
リターンコードを文字列メッセージに変換する一般的な方法もいいでしょう。