Перенаправить stderr в стандартный вывод в исполняемом процессе из python?
-
22-09-2019 - |
Вопрос
В bash-скрипте я могу написать:
exec 2>&1
exec someprog
И вывод stderr из someprog
будет перенаправлен на стандартный вывод.
Есть ли какой-нибудь способ сделать подобное, используя python os.exec*
функции?
Это не обязательно должно быть переносимым, просто работайте в Linux.
Решение
Наглядные примеры
Давайте выполним /bin/ls
с фиктивным аргументом, так что он жалуется в stderr.
$ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null : ffweew: No such file or directory $ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 2>/dev/null $ python -c "import os; os.dup2(1, 2); os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null $ python -c "import os; os.dup2(1, 2); os.execl('/bin/ls', '', 'ffweew')" 2>/dev/null : ffweew: No such file or directory $
Первые два вызова доказывают , что ls
не записывает в стандартный вывод, а записывает сообщение об ошибке в stderr.
В 3-м и 4-м вызовах программа Python дублирует файловый дескриптор 1 как файловый дескриптор 2, достигая желаемого эффекта.
Не связан с StackOverflow