理解Python中的"tail -f

3 投票
1 回答
719 浏览
提问于 2025-04-16 13:49

我写了一个非常简单的Python脚本:

def read_then_follow(file):
    for line in file:
        yield line
    while True:
        line = file.readline()
        if not line:
            time.sleep(1.0)
            continue
        yield line

for line in read_then_follow("some_file.txt"): print line

这个名为“some_file.txt”的文件里有几行文字,当我运行这个脚本时,这些文字会显示在屏幕上。如果我用命令echo "line" >> some_file.txt往文件里添加一行文字,这行文字会在1秒内显示出来。但是,如果我用vim打开这个文件,在底部添加一行并保存,脚本就会停止工作。它既不会把在vim里写的新行显示出来,也不会对后续的echo ...命令做出反应。

顺便说一下,我现在在Ubuntu 10.10上使用的是Python 2.6.6。

1 个回答

8

(我假设你正在使用某种类Unix的操作系统。)

在vim中保存文件实际上会在磁盘上创建一个文件,名字和之前的一样。你的脚本仍然在使用文件的句柄,而这个旧文件已经没有目录条目了。如果你的脚本结束了,旧文件的引用计数会降到0,这样这个文件就会被删除。

撰写回答