2016-08-05 26 views
0

Ich versuche eine ausführbare Binärdatei auszuführen, die einen Fehler erzeugt. Mein Code für die Ausführung von binären Popen mit:Python-Subprozess Popen gibt einen Fehlercode ungleich Null zurück, aber kein Fehler

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

Dies soll Fehler, wenn die Skriptausführung führt zu einem Fehler erhöhen. Der cmd ist in diesem speziellen Fall der Pfad zu der betroffenen ausführbaren Binärdatei.

Nun, wenn ich ausführen diese sehr binär auf meinem Terminal ./binary_file es mir einen Fehler msg

"Floating Point Ausnahme: 8" gibt.

Aber wenn das Skript von Popen ausgeführt wird, gibt es keinen Fehler sowie die Ausgabe. Aber der Rückkehrcode ist -8. Ich glaube, dass ein Rückgabecode ungleich Null einen Fehler bedeutet, und wenn ja, warum wurde die Nachricht nicht von Popen.communicate() erfasst?

Falls Sie sich fragen, was war die ausführbare Binärdatei. Die Binärdatei wurde durch das Kompilieren einer c-Datei generiert, die zu einem Laufzeitfehler führt. Hier ist der Inhalt der Datei C

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

Antwort

0

Der Ausgang von der Schale erzeugt wird, während ein Signal SIGFPE kontrollieren. Sie müssen dieses Signal in Ihrem Programm selbst abfangen und so handhaben, wie Sie es wünschen.

0

Dies ist nicht nur ein gewöhnlicher Laufzeitfehler, es ist ein Prozessabsturz, der vom Kernel ausgelöst wurde (über ein Signal).

Wenn Sie unter UNIX // Linux/OS X laufen, sollten Sie einen Core Dump (ulimit -c unlimited in der Shell) erhalten. Der Kernel schreibt nicht in den stderr eines Prozesses - er kann nicht, weil der Prozess abgestürzt ist.

Dies ist kein Problem mit Python.