我有一个类似于尾部的代码片段,我在网上发现了一些代码片段。不幸的是,我在某个时候发现,即使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
答案 0 :(得分:0)
我假设您使用的是Linux机器或类似设备。修改文件时,inode编号(使用ls -i filename)是否发生了变化?如果是 - 基本上您的旧文件已被删除,但它的内容仍可通过您的程序正在使用的文件句柄获得(即它仍然指向旧的inode)。在这种情况下,重新开放是唯一的可能性。
有关详细信息,请参阅What happens to an open file handler on Linux if the pointed file gets moved, delete