Python-重写print()

Python-重写print(),python,python-3.x,mod-wsgi,wsgi,Python,Python 3.x,Mod Wsgi,Wsgi,我正在使用mod_wsgi,我想知道是否有可能重写print()命令(因为它没有用) 这样做行不通: print = myPrintFunction 因为这是一个语法错误:(会 import sys sys.stdout = MyFileWrapper() 或者类似的工作?在Python2.x中,Print不是一个函数,因此无法直接实现 但是,您可以 如果您使用的是Python 3.0,假设您拥有正确的签名,那么您所拥有的将在其中发挥作用。另请参见本网站。如果您使用的是3.0,打印是一个函数

我正在使用mod_wsgi,我想知道是否有可能重写print()命令(因为它没有用)

这样做行不通:

print = myPrintFunction
因为这是一个语法错误:(

import sys
sys.stdout = MyFileWrapper()

或者类似的工作?

在Python2.x中,Print不是一个函数,因此无法直接实现

但是,您可以


如果您使用的是Python 3.0,假设您拥有正确的签名,那么您所拥有的将在其中发挥作用。另请参见本网站。

如果您使用的是3.0,打印是一个函数。如果您使用的是2.6,您可以从uu未来uu导入打印u函数继续使用打印函数


如果值得注意的是,Apache/mod_wsgi中对sys.stdout的“print”的使用受到了故意限制。这是因为便携式wsgi应用程序不应使用sys.stdin或sys.stdout,因为一些wsgi实现使用它们与服务器通信

因此,Apache/mod_wsgi试图强迫您编写wsgi应用程序,以便它可以移植到其他wsgi实现中

不幸的是,太多人似乎不关心编写好的代码,因此mod_wsgi 3.0将允许您写入sys.stdout,从而使用“print”,而不会像您应该做的那样将输出重定向到“sys.stderr”

无论哪种方式,mod_wsgi文档都详细说明了如何删除3.0之前版本的mod_wsgi中的限制。特别是,请参阅有关WSGIRestrictStdout指令的文档。有关调试技术的文档还讨论了该问题以及将sys.stdout映射到sys.stderr的问题

您可以在以下网站上阅读总结本期内容的评论:


正如Paolo提到的,虽然你可以将标准输出重定向到不同的源,如文件以进行日志记录,但你可能不需要它。我不需要它。如果你真的需要记录东西,你会首先使用日志记录本身,不是吗?而且,即使你不打印任何东西,你使用的第三方库是的,只要重新定向就行了

这个问题最简单的解决方案是将所有stdout重定向到stderr。在wsgi配置文件中,只需根据需要重定向即可

sys.stdout = sys.stderr

>>AttributeError:'function'对象没有属性'write'(调用替换时):(取消此操作,如果替换对象具有“write()”函数,则此操作有效。很酷。:)只需使用mod_wsgi 3.0,您甚至不必这样做。仅针对Python新手,为了减少可能会混淆新程序员的内容,原始海报中提到/ed了“打印”()command“.Python有不能重写的语句。Python也有函数;一些内置的.Python没有任何“命令”。但是语法“someword()”或在本例中的“print()”告诉其他Pythoneers,“someword”是函数,而不是语句,因为“()”结束括号。函数,甚至内置函数,都可以被覆盖。此注释仅用于澄清。相同的问题;更多帖子:
sys.stdout = sys.stderr