【问题标题】:python read last three lines from kernel logpython从内核日志中读取最后三行
【发布时间】:2012-06-24 14:31:18
【问题描述】:

我想循环读取内核日志/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() 将分析这三行并做 magic 我总是关闭文件并重新打开它,因为我认为这会解决问题,但事实并非如此。知道会发生什么吗?

【问题讨论】:

  • 我可能会使用tail,但我更喜欢直接在python中进行,因为脚本必须进行一些分析。这只是重要的 sn-p。
  • 检查活动状态的tail recipe
  • 使用 for 循环,您打开日志文件 100 次并读取持续 3 行 100 次。我不知道为什么必须使用这样的循环。如果您需要一些延迟,只需使用 time.sleep()。

标签: python linux file logging


【解决方案1】:

我通常会使用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了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-26
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2017-04-09
    相关资源
    最近更新 更多