我正在尝试使用Python2在macOS下读取一个日志文件(这个组合很重要,Python 3工作正常,Linux在两个版本都没有这个问题)。
此文件由另一个程序同时写入。
问题:新行(在最后一个阅读周期后出现)不适用于Python。 (但我用tail -f
看到了它们)。要重现,您可以在不同终端的同一目录中运行读写器(如果要检查,则可以在第三终端中tail -f out.out
运行):
阅读器:
import os
import time
def str_num(line):
n_s = line.find('#')
n_e = line[n_s:].find(' ')
print(line)
return int(line[n_s+1: n_s + n_e])
with open('out.out', 'rt') as _file:
while True:
os.path.getsize('out.out')
lines = _file.readlines(1000)
n1 = n2 = -1
if lines:
n1 = str_num(lines[0])
n2 = str_num(lines[-1])
print("%s (%s - %s)" % (len(lines), n1, n2))
time.sleep(1)
作家:
import time
num = 0
with open('out.out', 'w', buffering=1)as _file:
while True:
_file.write("*** String #%s ***\n" % num)
if not num % 100: print(num)
num += 1
time.sleep(0.01)
我发现一种解决方法是使用tell()
和seek()
来“重置”文件访问权限。有没有更智能的方法来解决这个问题?
答案 0 :(得分:0)
我想你可能想要一个+:
with open('out.out', 'a+') as _file:
根据此表:
| r r+ w w+ a a+
------------------|--------------------------
read | + + + +
write | + + + + +
create | + + + +
truncate | + +
position at start | + + + +
position at end | + +
请在python open built-in function: difference between modes a, a+, w, w+, and r+?
上查看问题