0

/var/log/messages我想循环读取内核日志的最后三行。

for i in xrange(0,100): 
    # do_stuff()
    file = open('/var/log/messages')
    lines = file.readlines()[-3:]
    # analyse_stuff()
    file.close()

但我对这段代码有疑问:

 [...]
 1013477960613797 1013477960959759 1013477961174602 
 1013477960613797 1013477960959759 1013477961174602 
 1013477960613797 1013477960959759 1013477961174602 
 1013477960613797 1013477960959759 1013477961174602 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559 
 1013477973551967 1013477973773506 1013477977678559
 1013477986756370 1013477990527612 1013477990834895 
 1013477986756370 1013477990527612 1013477990834895 
 1013477986756370 1013477990527612 1013477990834895
 1013477986756370 1013477990527612 1013477990834895
 1013477986756370 1013477990527612 1013477990834895
 1013477986756370 1013477990527612 1013477990834895
 1013477986756370 1013477990527612 1013477990834895
 1013477986756370 1013477990527612 1013477990834895
 [...]

如您所见,值重复了很多次。 do_stuff()执行一个二进制文件,它发出三个日志消息。 analyse_stuff()将分析这三行并做魔术 我总是关闭文件并重新打开它,因为我认为这会解决问题,但事实并非如此。知道会发生什么吗?

4

1 回答 1

4

我通常会使用tail,但如果你真的只想要最后的'n'行,并且不太关心跟随(类似于'tail -f'),那么你最简单的选择是这样的:

from collections import deque
last3 = deque(open('/path/to/your/file'), 3)
print last3

deque将逐行消耗,丢弃最旧的条目以保持 3 行的约束。查看http://docs.python.org/library/collections.html#collections.deque了解更多信息

于 2012-06-22T11:03:58.377 回答