2016-08-05 8 views
0

오류를 생성하는 실행 가능 바이너리를 실행하려고합니다. 는 popen을 사용하여 바이너리의 실행에 대한 나의 코드 :이이 오류를 발생하도록되어파이썬 하위 프로세스 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입니다. 나는 0이 아닌 반환 코드가 오류를 암시하고, 그렇다면 왜 Popen.communicate()가 메시지를 캡처하지 않았을까?

경우에 따라 실행 가능한 바이너리 파일이 무엇인지 궁금 할 때가 있습니다. 이진 파일은 런타임 오류가 발생하는 c 파일을 컴파일하여 생성되었습니다. SIGFPE 신호를 잡는 동안 여기서, C 파일

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

답변

0

출력은 쉘에 의해 생성되는 내용이다. 프로그램에서이 신호를 직접 잡아서 원하는대로 처리해야합니다.

0

이것은 일반적인 런타임 오류 일뿐만 아니라 커널이 신호를 통해 발생시킨 프로세스 크래시입니다.

UNIX/Linux/OS X에서 실행중인 경우 코어 덤프 (셸에 ulimit -c unlimited)가 있어야합니다. 커널은 프로세스의 표준 오류 (stderr)에 기록하지 않습니다.

이것은 파이썬에는 문제가되지 않습니다.