python“tail -f”就像函数的readline卡在EOF上一样

时间:2017-04-14 07:15:12

标签: python readline eof tail

我有一个类似于尾部的代码片段,我在网上发现了一些代码片段。不幸的是,我在某个时候发现,即使EOF不再存在,它似乎仍然停留在EOF上,因为有些东西被附加到文件中。它仍将返回0.如果我向后搜索,例如10个字节,它将读取到前一个EOF位置,这就是全部。我可以通过关闭并重新打开文件来修复它,但我不明白这种行为。有人可以帮忙吗?

代码:

def tail_f_nonblock(f):
    while True:
        where = f.tell()
        line = f.readline()
        if not line:
            diff = f.tell()-where
            f.seek(where)
        # If there was some output, give -1
            if diff!=0: return -1
            else: return 0
        else:
            return line

1 个答案:

答案 0 :(得分:0)

我假设您使用的是Linux机器或类似设备。修改文件时,inode编号(使用ls -i filename)是否发生了变化?如果是 - 基本上您的旧文件已被删除,但它的内容仍可通过您的程序正在使用的文件句柄获得(即它仍然指向旧的inode)。在这种情况下,重新开放是唯一的可能性。

有关详细信息,请参阅What happens to an open file handler on Linux if the pointed file gets moved, delete