文件读取卡在macOS下

时间:2017-09-28 08:05:41

标签: python macos

我正在尝试使用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()来“重置”文件访问权限。有没有更智能的方法来解决这个问题?

1 个答案:

答案 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+?

上查看问题