【问题标题】:Understanding the "tail -f in python"理解“python中的tail -f”
【发布时间】:2011-03-16 14:01:46
【问题描述】:

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

【问题讨论】:

    标签: python file-io file tail


    【解决方案1】:

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

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

    【讨论】:

    • 啊,这似乎是一个非常合理的解释。谢谢!
    • 您可以在 Vim 中查看 :help crontab 以获取有关该主题的一些信息。这是同一个问题。
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2011-02-19
    • 1970-01-01
    • 2017-05-10
    • 2023-03-25
    相关资源
    最近更新 更多