2013-04-30 85 views
3

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

这是通过重定向既pygmentize和stdoutstderr,我试过了命令,python run.py 2>&1 | pygmentize -l py

。 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 

有什么建议?

+1

这很奇怪。当我尝试你的例子,它工作正常。 (我强制回溯,它正确pygmentized。)你可以告诉我们'python run.py 2>&1'的输出(没有管道pygmentize)? – btanaka 2013-04-30 18:29:10

+0

@btanaka当我这样做,我会得到输出。我用那个测试和它的输出更新了我的问题。 – skyler 2013-04-30 18:32:38

回答

2

pygmentize reads the whole input stream从标准输入读取时只输出一切,如果输入流被关闭,所以只有在第一个进程结束后才能通过pyxy命令输出任何输出。

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

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