Python,如何将输出发送到文件和终端

时间:2013-02-22 08:53:37

标签: python logging stdout

我想使用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

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

2 个答案:

答案 0 :(得分:3)

来自documentation for sys.stdout:

  

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

答案 1 :(得分:2)

更具体地说,打印功能(在Python 2.X中它仍然是一个关键字,但这里没关系)做这样的事情

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

这样,当你调用它时,它会在sys.stdout上打印你的消息。但是,如果用包含.write方法的对象覆盖sys.stdout,那么它将调用该方法。 这是duck-typing的魔力。