【问题标题】:Python - printing to more than one output [duplicate]Python - 打印到多个输出[重复]
【发布时间】:2012-08-21 07:49:31
【问题描述】:

可能重复:
How do I duplicate sys.stdout to a log file in python?

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

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

【问题讨论】:

    标签: python io python-2.7


    【解决方案1】:

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

    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,因为这基本上就是您想要的。

    【讨论】:

    • 写完日志文件后你不想关闭它吗?
    • 它应该在析构函数中自动关闭
    • @carl,实际上,我认为它应该在超出范围时关闭 - 在write结束时...
    • 我认为@carl 意味着open('/tmp/log', 'a') 的析构函数
    【解决方案2】:

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

    来自Python's documentation

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 2019-02-24
      • 2018-08-10
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多