Как перенаправить stderr скрипта python3, используя тройник?
Я пользователь Debian и RedHat. Я хотел бы перенаправить stderr (модуль logging
) из Python3
скрипт. Сценарий выводит много вещей, и часть, которую я хочу захватить, может быть получена с помощью:
python3 ./script.py --input ./*.txt --verbose 2>> ./script.log
Это добавляет stderr к ./script.log
, Но я бы сохранил этот диалог и в терминале. Обычно я добиваюсь этого путем tee
команда. Проблема в следующем shell
линия (выполнена из bash
файл):
pyhton3 ./script.py --input ./*.txt --verbose | tee -a ./script.log
Выводит в терминал, но ничего не выводит ./script.log
, Есть идеи, как поступить?
2 ответа
Для отображения как stdout, так и stderr на терминале, при этом захватывая только stderr в файл, используйте:
python3 ./script.py --input ./*.txt --verbose 2>&1 1>/dev/tty | tee -a script.log
Способ, которым оболочка обрабатывает перенаправления, довольно тонок. Здесь 2>&1
приводит к тому, что команда stderr отправляется на tee
команда. 1>/dev/tty
в результате вывод команды напрямую идет в терминал. Порядок важен. Если порядок этих перенаправлений будет обратным, ничто не пойдет в трубу. В качестве альтернативы, если 1>/dev/tty
были опущены, тогда и stdout, и stderr были бы переданы tee
команда.
Вы можете перенаправить ваш stderr на стандартный вывод, а затем передать его тоже так
pyhton3 ./script.py --input ./*.txt --verbose 2>&1 | tee -a ./script.log