Перенаправить стандартный вывод из 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 в том направлении, куда я хочу идти.