我正在使用Python在DreamHost上託管的網站上工作。有一段時間,我使用默認設置,它使用CGI運行Python腳本。它運行良好,但是我擔心如果流量很大,運行速度會很慢並且會佔用大量內存,所以我使用this module將其切換到FastCGI。使用FastCGI查看Python網站中寫入stderr的內容
總的來說,它仍然正常工作,但有一個主要的煩惱:我似乎無法看到任何寫入標準錯誤流的東西。如果出現任何問題,我通常有用的線索來解決該問題。之前,我曾經在Apache錯誤日誌中看到發送給標準錯誤的東西。現在,它似乎消失了。
我試着製作一個測試腳本,並且使用sys.stderr.write(來自不同的地方)和environ [「wsgi.errors」]寫入字符串(從我的應用程序中,其中environ是第一個傳遞的參數由WSGI/FastCGI包裝器應用到應用程序)。無論哪種方式,我都找不到它們。有誰知道爲什麼,或者如何訪問這些數據?
請記住,這是我第一次使用FastCGI,所以請讓我知道如果我通過使用這個fcgi模塊做出不好的選擇。
引用FASTCGI規範(http://www.fastcgi.com/drupal/node/6?q=node/22)。 「它沒有傳統的打開文件stdin,stdout和stderr,並且它通過環境變量沒有收到太多的信息」。因此,取決於FASTCGI系統是否被宗教使用,可能根本不會有任何問題。正如Alex所說,將stderr映射到某個東西。最簡單的方法是在FASTCGI腳本文件中首先嚐試'sys.stderr = open(「/ tmp/myerrors.log」,「w +」)''。 – 2010-07-14 05:37:23
我試過你關於重新分配sys.stderr的建議,它工作。有點。我無法像以前那樣將錯誤記錄到錯誤日誌中,但這可能足以滿足我的目的。 我沒有嘗試sys.excepthook爲此目的,但我已經使用過它,它似乎會工作。 我還沒有嘗試過Atexit。 – 2010-07-15 05:29:24
@mikez,是的,我不知道如何從fastcgi內部的Apache日誌中寫入(我不會使用它 - 「mod_wsgi」!)。但是,寫入文件,使用'logging'模塊將錯誤日誌郵寄給你自己,在瀏覽器上顯示錯誤日誌(對於尚未投入使用的網站,只有:我的網站向我展示了大量的回溯,無論是Java或Python或任何其他的東西,當他們有問題,我只是一個用戶!)等等,是其他幾種可能性。 – 2010-07-15 05:55:03