【问题标题】:Logging realtime stdout to a file in Python?将实时标准输出记录到 Python 中的文件?
【发布时间】:2014-07-23 13:11:45
【问题描述】:

我想将不同类的实时标准输出记录到日志文件中。 这是我的演示代码。代码运行良好。但它正在等待示例函数完成。我想并行运行它。因此日志文件将在标准输出打印的同时写入。

import sys
import time

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

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

class sample:
  def __init__(self):
    print "TEST"
    time.sleep(5)

if __name__ == "__main__":
  a = sample()
  sys.stdout = Logger()

【问题讨论】:

  • 你试过了吗:self.log.flush()?在write 之后?请注意,sys.stdout 缓冲可能会根据许多因素/选项而改变,因此您最好 flush() 也这样做。
  • @Bakuriu ..感谢它的工作。另外我必须在a = sample()之前打电话给sys.stdout = Logger()

标签: python linux logging stdout


【解决方案1】:

调用file.write 不一定会立即将内容写入HD。这取决于file 对象的缓冲策略。如果你想在某个时刻强制写入磁盘,你可以使用flush()方法(另见this)。

请注意,sys.stdout 刷新策略取决于您的安装配置以及环境变量,因此如果您想保证标准输出和日志文件之间的“并行”写入,您必须 flush() 两个流:

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

【讨论】:

  • 参考链接中的os.fsync() 有助于解决我的问题!
猜你喜欢
  • 1970-01-01
  • 2017-04-13
  • 2012-04-14
  • 2013-01-13
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
相关资源
最近更新 更多