Перенаправить stderr на стандартный вывод процесса exec-ed из python? - PullRequest
3 голосов
/ 22 февраля 2010

В bash-скрипте я могу написать:

exec 2>&1
exec someprog

И вывод stderr someprog будет перенаправлен на стандартный вывод.

Есть ли способ сделать подобное с помощью функций Python os.exec*?

Это не обязательно должно быть переносимо, просто работайте в Linux.

1 Ответ

4 голосов
/ 22 февраля 2010

os.dup2(1, 2)

Примеры с подсветкой

Давайте выполним /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 не записывает в stdout и записывает сообщение об ошибке в stderr.

В 3-м и 4-м вызовах программа Python дублирует дескриптор файла 1 как дескриптор файла 2, достигаяжелаемый эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...