【问题标题】:Writing and reading continuously in a file在文件中连续写入和读取
【发布时间】:2019-03-08 12:18:47
【问题描述】:

我目前正在尝试找到一种方法,让一个线程在文件中写入日志,另一个线程读取日志并处理它们。我发现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+') 似乎与冲洗结合使用,应该早点考虑到这一点。 非常感谢!

非常感谢, 贾兹

【问题讨论】:

  • "当我尝试在文件中写入内容时,我需要关闭它,否则文件将保持空白。" 也许.flush() 会帮助你。不知道能不能解决你所有的问题。
  • 非常感谢!我猜它确实解决了部分问题。但是,我面临着一个新的(见编辑)。再次感谢

标签: python python-3.x io


【解决方案1】:

这个库能满足你的需要吗? https://github.com/B2W-BIT/and 异步输入输出日志库

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 2015-09-29
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多