2013-04-30 60 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。