从文件中获取新行

6 投票
3 回答
9926 浏览
提问于 2025-04-18 13:48

目前我有一段代码,但它会读取所有行,然后用一个一直循环的方式来监视文件:

with open('/var/log/logfile.log') as f:
        while True:
            line = f.readline()
            if not line:
                time.sleep(1)
            else:
                print(line)

其实我只需要在打开文件后,获取那些新添加的行——有没有人能帮我解决这个问题?也许有比用一直循环的方式更好的监视方法?

还有一个问题是,在Linux系统上,这个脚本会锁住文件,导致在我关闭脚本之前无法写入文件。而在OS X上就没这个问题。如果能有个解决办法就更好了。

希望有谁能分享一下类似的经验。

3 个回答

0

试试这个,

readfile = open('/var/log/logfile.log','r')
if readfile:
   for lines in readfile:
      print lines
readfile.close()
2
with open('/var/log/logfile.log','r') as f:
    for line in f:
        print line

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

5

你可以先把文件全部读一遍,然后关闭它,再对这个文件进行监控,这个监控的方式是通过定期检查来实现的,下面的代码就是这样做的。

import time

filePath = '/var/log/logfile.log'

lastLine = None
with open(filePath,'r') as f:
        while True:
            line = f.readline()
            if not line:
                break
            print(line)
            lastLine = line

while True:
    with open(filePath,'r') as f:
        lines = f.readlines()
    if lines[-1] != lastLine:
        lastLine = lines[-1]
        print(lines[-1])
    time.sleep(1)

不过,你也可以使用一些工具,像这里提到的:不通过轮询检测文件变化

撰写回答