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

1 投票
1 回答
501 浏览
提问于 2025-04-16 01:16

我正在做一个网站,托管在DreamHost上,使用Python。之前我一直用他们的默认设置,通过CGI来运行Python脚本。这种方式运行得还不错,但我担心如果流量很大,可能会变得很慢,还会占用很多内存,所以我决定换成FastCGI,使用这个模块

总体来说,现在运行得也不错,但有一个很烦人的问题:我似乎看不到任何写入标准错误流的内容。如果出现问题,我通常用来获取有用线索的方式现在不管用了。之前,我可以在Apache的错误日志中看到标准错误的内容,但现在这些信息似乎都消失了。

我尝试写了一个测试脚本,使用sys.stderr.write(从不同地方)和environ["wsgi.errors"].write(在我的应用程序内部,environ是WSGI/FastCGI包装器传给应用程序的第一个参数)来写字符串。但无论如何,我都找不到这些信息。有没有人知道为什么,或者怎么才能访问这些数据?

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

1 个回答

2

如果你的系统中有东西正在捕捉文件描述符2(也就是“真实”的标准错误输出),你可以把 sys.stderr 赋值给任何一个可以写入的打开文件对象,或者一个类似文件的对象(只要它能实现 write 方法就行)——这包括一个 cStdIO.StdIO 实例,你可以随时通过调用它的 .getvalue() 方法来获取它的值(只要它没有被关闭)。

为了在代码终止之前捕捉到任何未处理的异常,你可以把 sys.excepthook 赋值为你自己定义的一个函数,这个函数可以获取信息并以你选择的方式输出;或者,如果你想获取并输出任何写入到 sys.stderr 的内容,即使没有异常发生(如果这是你想要的——从你的问题来看我不太确定),你可以使用 atexit 来注册你的抓取信息并输出的函数。

撰写回答