连续写入和读取文件

时间:2018-10-03 09:41:37

标签: python python-3.x io

我目前正在尝试找到一种方法,让一个线程在文件中写入日志,而另一个线程读取并处理日志。我发现a way(第5部分)可以连续读取文件中的数据,但是将文件写入数据中确实有问题。

当我尝试在文件中写入内容时,我需要随后将其关闭,否则文件将保持空白。但是,如果我关闭文件,则无法再读取它。 所以我的阅读线程看起来像这样:

def follow(file):
    file.seek(0,0)
    while True:
        line = file.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line

file = open(self.path)
loglines = follow(self.file)
for line in loglines:
    print(line)

但是写的时候,我使用了类似的东西:

file = open(self.path, 'w')
file.write(self.generateLog())
file.close()
sleep(self.duration)

但是,一旦调用file.close(),我的阅读部分就会出错:

  line 38, in run
    for line in loglines:
  line 147, in follow
    line = file.readline()
ValueError: I/O operation on closed file.

但是,如果在写入后不关闭文件,则永远不会更新。 (我只是在做写作部分,以确保阅读部分可以正常工作。理论上,日志文件将通过apache或其他方式进行更新。)

编辑:感谢flush(),我不再有这个问题了,非常感谢! 但是似乎写作和阅读可能很难。如果打印出我写的行和我读过的行,我将得到类似:

Writing : 158.228.210.37 [...] "GET /cat/rzkpvwons HTTP/1.0" 505 1119
Reading : 5 1119

因此,读数无法读取整行。有什么问题的想法吗?

EDIT2:只是将open(path,'w')更改为open(path,'a +')似乎可以与同花顺结合使用,应该早些考虑过。 非常感谢!

非常感谢你, 贾兹

1 个答案:

答案 0 :(得分:0)

此库需要执行任何操作吗? https://github.com/B2W-BIT/and 异步输入输出日志记录库