理解Python中的"tail -f
我写了一个非常简单的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,这样这个文件就会被删除。