看看使用FastCGI在Python网站上写入stderr的内容

时间:2010-07-14 04:59:07

标签: python fastcgi wsgi stderr

我正在使用Python在DreamHost上托管的网站上工作。有一段时间,我正在使用他们的默认设置,它使用CGI运行Python脚本。它运行良好,但我担心如果我获得大量流量,它会运行缓慢并使用大量内存,所以我使用this module将其切换到FastCGI。

总的来说,它仍然可以正常工作,但有一个主要的烦恼:我似乎无法看到任何写入标准错误流的内容。如果出现任何问题,我通常会提供有关如何解决这个问题的有用线索。之前,我曾经在Apache错误日志中看到发送到标准错误的内容。现在,它似乎消失了。

我尝试制作一个测试脚本,并使用sys.stderr.write(来自不同的地方)编写字符串,并使用environ [“wsgi.errors”]。写(从我的应用程序中,其中environ是传递给的第一个参数WSGI / FastCGI包装器的应用程序)。无论哪种方式,我都找不到它们。有谁知道为什么或如何访问这些数据?

请记住,这是我第一次使用FastCGI,所以如果我使用这个fcgi模块做出错误选择,请告诉我。

1 个答案:

答案 0 :(得分:2)

如果系统中的某些内容正在捕获文件描述符二(“真正的”stderr),则可以将sys.stderr分配给任何打开的可写文件对象或类似文件的对象(它基本上只需要实现write) - 包括cStdIO.StdIO实例,通过调用.getvalue()方法,您可以随时(在关闭之前)获取其值。

要在终止代码之前捕获任何未捕获的异常,请将sys.excepthook分配给您的函数,在其中获取信息并以您选择的任何方式发出;或者,即使没有例外(如果这是你想要的 - 我不确定,从你的问题),使用atexit来获取和发出写入sys.stderr的任何内容 注册你的抓取信息和发出它的功能。