Redirect stdout do python para chamadas C

Esta é uma pergunta de acompanhamento deaqu especificamente sobre o seurespond.

De um módulo python, estou chamando umOlá Mund executável que simplesmente imprimeHello World para o stdout. Estou interessado em redirecionar essa saída para um pythonStringIO e topou comest resposta que quase me leva até a soluçã

A parte crítica desta resposta é 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')

Também gostaria de restaurar o stdout como era antes do redirecionament

QuestõeO que exatamente está acontecendo na função acima?O que édup edup2 fazendo?O que é/dev/null?O que a linha 8 está fazendo? sys.stdout = os.fdopen(newstdout, 'w'))Como posso armazenar o stdout em umStringIO objeto?Como posso restaurar o stdout após a chamada para o meuOlá Mund programa

Tenho certeza de que, assim que tiver a resposta para minha pergunta 1, as respostas das perguntas 2 e 3 serão fáceis. Decidi publicá-las de qualquer maneira para talvez empurrar a resposta da pergunta 1 na direção em que quero i

questionAnswers(3)

yourAnswerToTheQuestion