3

我创建了一个非常简单的 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。

4

1 回答 1

8

(我假设您使用的是一些类似 Unix 的操作系统。)

在 vim 中保存实际上会在磁盘上创建一个同名的新文件。您的脚本持有的文件句柄仍然指向文件,该文件不再有目录条目。如果您的脚本终止,则旧文件的引用计数器将降至 0,并且该文件将被删除。

于 2011-03-16T14:06:17.927 回答