Redirect stdout de python para llamadas C

Esta es una pregunta de seguimiento deaqu específicamente en relación con suresponde.

Desde un módulo de Python estoy llamando a unHola Mund ejecutable que simplemente imprimeHello World al stdout. Estoy interesado en redirigir esa salida a una pythonStringIO y me encontré conest respuesta que casi me lleva a la solución.

La parte crítica de esta respuesta es este segmento de código:

1. def redirect_stdout():
2.     print "Redirecting stdout"
3.     sys.stdout.flush() # <--- important when redirecting to files
4.     newstdout = os.dup(1)
5.     devnull = os.open('/dev/null', os.O_WRONLY)
6.     os.dup2(devnull, 1)
7.     os.close(devnull)
8.     sys.stdout = os.fdopen(newstdout, 'w')

También me gustaría restaurar el stdout como estaba antes de la redirección.

PreguntasQué está sucediendo exactamente en la función anterior?Que esdup ydup2 ¿haciendoQue es/dev/null? ¿Qué está haciendo la línea 8? sys.stdout = os.fdopen(newstdout, 'w')) ¿Cómo puedo almacenar el stdout en unStringIO objeto?¿Cómo puedo restaurar el stdout después de la llamada a miHola Mund programa?

Estoy bastante seguro de que una vez que tenga la respuesta para mi pregunta 1, las respuestas de las preguntas 2 y 3 serán fáciles. Decidí publicarlos de todos modos para tal vez empujar la respuesta de la pregunta 1 en la dirección donde quiero ir.

Respuestas a la pregunta(6)

Su respuesta a la pregunta