Estoy ejecutando un ejecutable C desde Python y este ejecutable a veces se segmenta. Cuando segmenta, el módulo de subproceso no devuelve nada en stdout o stderr.El módulo de subproceso de Python no devuelve stdout en segfault
Código de ejemplo:
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
La fuente de a.out
es:
int main() {
printf("hello world\n");
int x = 1/0;
}
La salida del ./a.out
es:
hello world
Floating point exception
La salida del código Python es (en Linux , python 2.7):
out: ""
err: ""
-8
¿Hay alguna forma de obtener la salida del ejecutable incluso si se bloquea?
Un método genérico para traducir el código de retorno a un mensaje de cadena, también sería bueno.
Buena solución, si controla el código C y puede agregar la llamada 'setvbuf' y volver a compilar. Estaba asumiendo el código C de terceros, que está fuera de cuestión modificar. – Celada
Bueno, si el código de su tercero no elimina su stdout antes de que falle, no hay mucho que pueda hacer. – vy32