Python - 如何将输出打印到多个位置?

5

可能重复:
如何在Python中将sys.stdout复制到日志文件中?

是否有可能让Python的print命令或其他Python命令将字符串打印到两个位置?例如,我想在一个语句中同时将内容打印到控制台和输出文件中(这样我就不需要重复使用print语句)。

最好能够针对Python 2.x提供解决方案,如果有必要的话。

2个回答

13

理论上,你可以尝试以下方法:

class Out(object):
    def write(self, s):
        sys.__stdout__.write(s)
        open('/tmp/log', 'a').write(s)

sys.stdout = Out()

...

print something # prints to stdout and logs

但更好的方法是放弃print,直接使用logging,因为这实际上是你想要的。


你不想在写入日志文件后关闭它吗? - Tim Pietzcker
3
析构函数中应当自动关闭。 - carl
@carl,实际上,我认为它应该在超出范围时关闭 - 在write的结尾... - Daren Thomas
我认为@carl的意思是open('/tmp/log', 'a')的析构函数。 - slallum

2

@carls的评论(我还没有足够的声望来评论):

来自Python文档

在处理文件对象时使用with关键字是一个好习惯。这样做的好处是,即使在执行过程中引发异常,文件也会在其套件完成后正确关闭。而且与编写等效的try-finally块相比,它也要短得多:

>>> with open('/tmp/workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接