Ich führe eine C ausführbare Datei von Python und diese ausführbare Datei manchmal segfaults. Wenn es segfaults gibt das Subprozessmodul nichts in stdout oder stderr zurück.Python Subprozess-Modul gibt nicht Stdout auf segfault zurück
Beispielcode:
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
Die Quelle für a.out
ist:
int main() {
printf("hello world\n");
int x = 1/0;
}
Der Ausgang des ./a.out
ist:
hello world
Floating point exception
Der Ausgang des Python-Code ist (in Linux , Python 2.7):
01.235.Gibt es eine Möglichkeit, die Ausgabe der ausführbaren Datei zu erhalten, selbst wenn es abstürzt?
Eine generische Methode, um Rückkehrcode in eine Zeichenfolge Nachricht zu übersetzen, wäre auch nett.
Gute Lösung, wenn Sie den C-Code steuern und in der Lage sind, den 'setvbuf'-Aufruf hinzuzufügen und neu zu kompilieren. Ich nahm C-Code von Drittanbietern an, der nicht geändert werden kann. – Celada
Nun, wenn Ihr Code von Drittanbietern nicht seine stdout nicht spülen, bevor es abstürzt, gibt es nicht viel Sie tun können. – vy32