我正在使用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