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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta