El módulo de subproceso de Python no devuelve stdout en segfault
Estoy ejecutando un ejecutable C de Python y este ejecutable a veces segfaults. Cuando falla, el módulo de subproceso no devuelve nada en stdout o stderr.
Código de muestra:
<code>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 </code>
La fuente dea.out
es:
<code>int main() { printf("hello world\n"); int x = 1 / 0; } </code>
La salida de./a.out
es:
<code>hello world Floating point exception </code>
La salida del código de Python es (en Linux, python 2.7):
<code>out: "" err: "" -8 </code>
¿Hay una manera de obtener la salida del ejecutable incluso si se bloquea?
Un método genérico para traducir código de retorno a un mensaje de cadena, también sería bueno.