我的应用程序是从run.py调用的。我已经安装了Pygments,我想重定向Python的输出,以便在发生回溯时,它们的格式更易于读取。
这是我试过的命令,python run.py 2>&1 | pygmentize -l py
通过pygmentize重定向stdoutstderr。pygmentize文档说,如果没有提供文件,它将从stdin中读取,“如果没有提供输入文件,请使用stdin,如果没有提供-o,请使用stdout。”
但是,当我这样重定向时,没有输出——错误、日志语句或其他任何东西——输出到我的终端。
当我运行命令时,没有将其输出管道化为pygmentize,即python run.py 2>&1时,我得到以下输出:

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

有什么建议吗?

最佳答案

pygmentizereads the whole input stream当从stdin读取时,只有在输入流关闭时才输出所有内容,因此只有在第一个进程结束后,才能通过pygments获得任何输出。
恐怕你对此无能为力。如果您想格式化一个连续的流,您只能尝试在pygments周围编写自己的包装器,它以块的形式读取输入流并将其馈送给pygments。
现在根本看不到任何输出的原因是,您可能正在使用Ctrl+C来停止shell中的进程,但这会杀死这两个进程。如果您使用kill只终止服务器进程,那么您至少应该看到上面提到的行通过pygments。

09-15 14:57