自修改Python?如何在不触及sys.stdout的情况下重定向函数中的所有print语句?

Fak*_*ame 0 python python-2.6

我有一种情况,我试图将一些大的,复杂的python例程移植到线程环境.

我希望能够在每个调用的基础上将函数print声明的输出重定向到其他地方(logging.Logger具体而言).

我真的不想修改我正在编译的代码的源代码,因为我需要保持与调用这些模块的其他软件的向后兼容性(这是单线程的,并通过简单地抓取写入的所有内容来捕获输出sys.stdout).

我知道最好的选择是做一些重写,但我真的没有选择.

编辑 -

或者,有什么方法可以覆盖打印的本地定义以指向不同的功能?

然后,我可以定义本地print = system print,除非被kwarg覆盖,并且只涉及在每个例程的开头修改几行.

Joh*_*ooy 6

在Python2.6(和2.7)中,您可以使用

from __future__ import print_function
Run Code Online (Sandbox Code Playgroud)

然后,您可以像更改print()Python3一样更改代码以使用该函数

这允许您创建一个名为print的模块全局或本地函数,它将优先于内置函数使用

例如.

from __future__ import print_function

def f(x, print=print):
    print(x*x)

f(5)
L=[]
f(6, print=L.append)
print(L)
Run Code Online (Sandbox Code Playgroud)