用Python复制"tail -f"

Pyd*_*man 4 python yield generator tail seek

根据David Beazley关于生成器的讨论,以下代码应该复制UNIX tail -f命令:

import time
def follow(thefile):
    thefile.seek(0,2)
    while True:
        line = thefile.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line

f = open('followed.txt')
lines = follow(f)

for i in lines:
    print i
Run Code Online (Sandbox Code Playgroud)

如果我在shell中运行它,它正在做"某事",它确实锁定了IPython笔记本,但它没有打印出follow.txt的内容.为什么这样?

Hai*_*ang 5

我尝试了脚本,它的工作原理.

您必须确保输入文件是一个不断增长的文件.如果没有,它会悬挂并期待新的生长线.

这是一个脚本,每隔5秒就将带有时间戳的行写入sample.csv.

import os
import time
import datetime

while True:
    os.system("echo " + "sample line with timestamp:{0}".format(datetime.datetime.now()) + " >> " + " sample.csv")
    time.sleep(5)
Run Code Online (Sandbox Code Playgroud)

使用您的tail -f脚本阅读它,您将看到输出.

  • @pyderman 您不能添加一行并保存文件。它将创建一个具有相同名称的新文件 (2认同)