在Django中,如何允许print语句与Apache WSGI一起使用?

TIM*_*MEX 6 python apache django debugging wsgi

"print"仅适用于开发服务器.但是,如果我希望它在Apache中工作呢?以防万一我忘记评论...我希望能够顺利进行而不会导致错误.

(只打印到没有)

Tom*_*ski 8

至于quick print,只需使用:

print >>sys.stderr, 'log msg'
Run Code Online (Sandbox Code Playgroud)

- 然后它登陆error.log,当然.

  • 快速打印到stderr的另一种方法是`sys.stderr.write('log mgs')`。 (2认同)

ars*_*ars 6

请参阅Graham Dumpleton的帖子:


Cra*_*der 3

您提出的建议是一个坏主意,但如果您坚持这样做,请查看mod_wsgi 配置指令

WSGI限制标准输出

Description: Enable restrictions on use of STDOUT.
Syntax:      WSGIRestrictStdout On|Off
Default:     WSGIRestrictStdout On
Context:     server config
Module:      mod_wsgi.c
Run Code Online (Sandbox Code Playgroud)

行为良好的 Python WSGI 应用程序不应尝试将任何数据直接写入 sys.stdout 或使用 print 语句而不将其定向到备用文件对象。这是因为托管 WSGI 应用程序(例如 CGI)的方式使用标准输出作为将响应内容发送回 Web 服务器的机制。如果 WSGI 应用程序直接写入 sys.stdout,则可能会干扰 WSGI 适配器的操作并导致输出流损坏。

为了促进 WSGI 应用程序的可移植性,mod_wsgi 限制对 sys.stdout 的访问,并且如果尝试显式使用 sys.stdout 将引发异常。

人们可能想要删除此限制的唯一一次纯粹是为了在应用程序调试期间能够使用 print 语句的方便,或者某些第三方模块或 WSGI 应用程序在不应该使用 print 的情况下错误地使用了 print 。如果删除对使用 sys.stdout 的限制,则写入其中的任何数据都将被发送到 sys.stderr 并出现在 Apache 错误日志文件中。