理解“python 中的 tail -f”

发布于 2024-10-22 15:07:50 字数 611 浏览 2 评论 0原文

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

I have created a very simple python script:

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

The file "some_file.txt" contains a few lines of text, which will be written to screen when I run the script. If I then add a line to the file with echo "line" >> some_file.txt, the line will be printed to the screen within 1 second. But: if I open the file in vim, add a line at the bottom and save, the script stops to function. It neither writes the new line written in vim to screen nor respons to further echo ... commands.

For your information, I am currently using python 2.6.6 on Ubuntu 10.10.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

近箐 2024-10-29 15:07:50

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

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

(I'm assuming you are on some Unix-like operating system.)

Saving in vim will actually create a new file with the same name on the disk. The file handle held by your script still points to the old file, which does not have a directory entry anymore. If your script terminates, the reference counter of the old file will drop to 0 and the file will be removed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文