3

我的应用程序是从run.py. 我已经安装了 Pygments,我想重定向 Python 的输出,以便在发生回溯时将它们格式化为更易于阅读的格式。

这是我尝试过的命令,python run.py 2>&1 | pygmentize -l py

重定向stdoutstderr通过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

有什么建议么?

4

1 回答 1

2

pygmentize在从 stdin 读取时读取整个输入流,并且仅在输入流关闭时才输出所有内容,因此您只能在第一个进程结束后通过 pygments 获得任何输出。

恐怕你对此无能为力。如果你想格式化一个连续的流,你只能尝试围绕 pygments 编写自己的包装器,它以块的形式读取输入流并将其提供给 pygments。

您现在根本看不到任何输出的原因是您可能正在使用Ctrl+C在 shell 中停止您的进程,但这会杀死两个进程。如果您kill只使用终止服务器进程,那么您至少应该看到上面提到的行通过 pygments。

于 2013-04-30T18:41:44.603 回答