7

我想使用 Python 将输出发送到log.txt终端上的文件和 STDOUT。这是我所拥有的:

import sys
class Logger(object):
    def __init__(self, filename="Default.log"):
        self.terminal = sys.stdout
        self.log = open(filename, "a")

    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)

sys.stdout = Logger("log.txt")
print "Hello world !"            #This line is saved in log.txt and STDOUT

该程序将输出发送到文件和标准输出。我的问题是:文件的写入函数是如何被调用的?

4

2 回答 2

3

从sys.stdout的文档中:

stdout 和 stderr 不必是内置文件对象:任何对象都是可以接受的,只要它有一个带有字符串参数的 write() 方法。

于 2013-02-22T09:09:33.543 回答
2

更具体地说,print函数(在 Python 2.X 中它仍然是一个关键字,但在这里无关紧要)执行类似这样的操作

import sys
def print(message):
    sys.stdout.write(message)

这样,当您调用它时,它将在 sys.stdout 上打印您的消息。但是,如果您使用包含 .write 方法的对象覆盖 sys.stdout,那么它将调用该方法。这就是鸭式打字的魔力。

于 2013-02-22T09:21:45.413 回答