我正在使用 python 2.6.6,我需要重载默认的 python 打印功能。我需要这样做,因为此代码可能用于必须使用内置函数生成输出的系统上,否则不会显示输出。
因此,例如,如果您有这样的 python 脚本:
from __future__ import print_function
def NewPrint(Str):
with open("somefile.txt","a") as AFile:
AFile.write(Str)
def OverloadPrint():
global print
print = NewPrint
OverloadPrint()
print("ha")
它工作正常。“重载”打印的输入位于 NewPrint 指定的文件中。
现在考虑到这一点,我希望能够运行上面的几行并让 print 完成 NewPrint 在整个脚本执行期间所做的事情。现在,如果我从另一个使用 print 的模块调用函数,它将使用内置的 print 而不是我刚刚覆盖的那个。我想这与命名空间和内置函数有关,但我的 python 还不够好。
编辑:
我试图保持简单,但看起来这引起了更多的混乱......
- 重载 print 的函数将打印到 GUI,因此如果函数重载,则无需关心重定向。
我知道我的示例没有执行 print 函数实际执行的操作。一个更好的例子来说明我是如何考虑编码的(我知道仍然不是很好):
def hli_print(*args, **kw): """ print([object, ...], sep=' ', end='\n', file=sys.stdout) """ sep = kw.get('sep', ' ') end = kw.get('end', '\n') File = kw.get('file', sys.stdout) args = [str(arg) for arg in args] string = sep.join(args) + end File.write(string) hli_Print(string)
从上面的 2 中,您可以看到我必须用来打印到 GUI“hli_Print”的函数,它是一个通过 swig 包装器公开的 C++ 函数。
- 我们只使用标准库和我们自己的 swig 包装器,我们的开发人员也使用 print 作为函数(习惯于 3.X)。所以我并不太担心其他一些调用 print 的模块并有其他的东西。
从所有评论中,我猜只使用一些 print_() 函数而不是 print() (这是我们目前所做的)可能是最好的,但我真的很想知道在 python 中是否可以做我所做的事情描述。