从文件中只获取新行

时间:2014-07-18 06:26:20

标签: python python-2.7 logging python-3.x

目前我有这段代码,但它会读取所有行,然后使用while True语句观察文件:

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

我实际上只需要在打开文件后检测到的行之后出现新行 - 任何可以帮助我的人?也许用更好的方式观看它,而不是用while语句?

另一个问题是,在Linux机器上,脚本实际上是锁定文件,因此在我再次关闭脚本之前无法写入该文件。在OS X上它工作正常。也可以尝试解决这个问题。

希望有人在那里工作过类似的东西。

3 个答案:

答案 0 :(得分:1)

试试这个,

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

答案 1 :(得分:1)

您最初可以完全读取该文件,然后将其关闭,并在其上保留一个更改监视器,此监视器将在下面使用轮询实现。

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)

但您也可以使用以下所述的工具:Detect File Change Without Polling

答案 2 :(得分:1)

with open('/var/log/logfile.log','r') as f:
    for line in f:
        print line