Перенаправить стандартный вывод из Python для вызовов C

Это дополнительный вопрос отВот особенно в отношении егоответ.

Из модуля Python я звонюПривет, мир исполняемый файл, который просто печатаетHello World на стандартный выход. Я заинтересован в перенаправлении этого вывода на питонаStringIO и столкнулся сэто ответ, который почти подводит меня полностью к решению.

Критическая часть этого ответа - этот сегмент кода:

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')

Также я хотел бы восстановить стандартный вывод, как это было до перенаправления.

ВопросовЧто именно происходит в функции выше?Что такоеdup а такжеdup2 делать?Что такое/dev/null?Что делает строка 8? (sys.stdout = os.fdopen(newstdout, 'w'))Как я могу хранить стандартный вывод вStringIO объект?Как я могу восстановить стандартный вывод после звонка на мойПривет, мир программа?

Я почти уверен, что когда у меня будет ответ на мой вопрос 1, ответы на вопросы 2 и 3 будут простыми. В любом случае я решил опубликовать их, чтобы подтолкнуть ответ на вопрос 1 в том направлении, куда я хочу идти.

Ответы на вопрос(3)

Ваш ответ на вопрос