0

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

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

我尝试制作一个测试脚本,并使用 sys.stderr.write (来自不同的地方)和 environ["wsgi.errors"].write (在我的应用程序中,其中 environ 是通过WSGI/FastCGI 包装器)。不管怎样,我找不到他们。有谁知道为什么或如何访问这些数据?

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

4

1 回答 1

2

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

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

于 2010-07-14T05:19:56.533 回答