5

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

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

如果这可能很重要,我希望有一个 Python 2.x 的解决方案。

4

2 回答 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,因为这本质上就是你想要的。

于 2012-08-21T08:00:10.443 回答
2

对@carls 的评论的评论(我还没有评论的声誉):

来自Python 的文档

在处理文件对象时,最好使用with关键字。这样做的好处是文件在其套件完成后正确关闭,即使在途中引发异常也是如此。它也比编写等效的 try-finally 块短得多:

>>> with open('/tmp/workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True
于 2012-08-21T09:50:13.773 回答