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.