Перенаправить трассировку python через Pygments

Мое приложение вызывается из run.py. Я установил Pygments и хочу перенаправить вывод Python, чтобы по мере возникновения трассировки они форматировались в более удобном для чтения формате.

Это команда, которую я пробовал, python run.py 2>&1 | pygmentize -l py

Перенаправление stdout и stderr через pygmentize. В документации pygmentize говорится, что он будет читать из stdin, если файл не указан: «Если входной файл не указан, используйте стандартный ввод, если -o не указан, используйте стандартный вывод».

Однако, когда я перенаправляю таким образом, на мой терминал не выводятся никакие выходные данные — ошибки, операторы журнала или что-либо еще.

Когда я запускаю свою команду без передачи ее вывода в pygmentize, то есть python run.py 2>&1, я получаю этот вывод:

INFO:werkzeug: * Running on http://0.0.0.0:5000/
INFO:werkzeug: * Restarting with reloader

Какие-либо предложения?


person skyler    schedule 30.04.2013    source источник
comment
Это странно. Когда я пробую ваш пример, он работает нормально. (Я заставил трассировку, и она правильно пигментирована.) Можете ли вы показать нам вывод python run.py 2>&1 (без канала для пигментации)?   -  person btanaka    schedule 30.04.2013
comment
@btanaka, когда я это делаю, я получаю результат. Я обновил свой вопрос этим тестом и его выводом.   -  person skyler    schedule 30.04.2013


Ответы (1)


pygmentize считывает весь входной поток при чтении со стандартного ввода и выводит все только в том случае, если входной поток закрыт, поэтому вы получите любой вывод, передаваемый через pygments, только после завершения вашего первого процесса.

Боюсь, вы мало что можете с этим поделать. Если вы хотите отформатировать непрерывный поток, вы можете только попытаться написать свою собственную оболочку вокруг pygments, которая считывает входной поток кусками и передает его в pygments.

Причина, по которой вы вообще не видите никакого вывода сейчас, заключается в том, что вы, вероятно, используете Ctrl+C для остановки вашего процесса в оболочке, но это убивает оба процесса. Если вы используете kill только для завершения серверного процесса, вы должны увидеть, по крайней мере, строки, которые вы упомянули выше, проходящие через pygments.

person mata    schedule 30.04.2013