2016-08-05 8 views
0

エラーを生成する実行可能バイナリを実行しようとしています。 popenのを使用して、バイナリの実行のための私のコード:これはエラーを発生させることになっているPythonのサブプロセスPopenがエラーコード0以外のエラーコードを返します。

p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) 
output, error = p.communicate() 
return_code = p.returncode 
if error: 
    raise SomeLocallyDefinedError 

時にエラーでスクリプトの実行結果。この特定の場合のcmdは、関連する実行可能バイナリへのパスです。今

それは私にエラーMSG

「浮動小数点例外:8」を与える./binary_file私は私の端末で、これは非常にバイナリを実行します。

しかし、Popenでスクリプトを実行すると、エラーも出力もありません。しかし戻りコードは-8です。私はゼロ以外のリターンコードはエラーを意味し、そうであればPopen.communicate()によってメッセージがキャプチャされなかったのはなぜですか?

実行可能なバイナリファイルが何であるか疑問に思っている場合に備えてください。バイナリファイルは、実行時エラーを引き起こすcファイルのコンパイルによって生成されました。ここにはCファイルの内容があります

# include<stdio.h> 
int main(){ 
    int a = 18; 
    int b = 0; 
    int c = a/b; 
    printf("%d", c); 
} 

答えて

0

出力はシェルによって生成され、SIGFPE信号を受け取ります。自分のプログラムでこのシグナルを捉え、あなたが望むようにそれを処理しなければなりません。

0

これは単なる通常のランタイムエラーではなく、シグナルによってカーネルによって発生したプロセスクラッシュです。

UNIX/Linux/OS Xで実行している場合は、コアダンプ(シェルにulimit -c unlimited)が必要です。カーネルはプロセスの標準エラー出力に書き込みません。プロセスがクラッシュしたため、カーネルはプロセスの標準エラー出力に書き込みません。

これはPythonでは問題ありません。

関連する問題