0

/var/log/messagesカーネル ログの最後の 3 行をループで読み取りたい。

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()バイナリを実行し、3 つのログ メッセージを発行します。 analyse_stuff()3行を分析し、魔法 を行います。私はいつもファイルを閉じてから開き直します。これで問題が解決すると思ったのですが、そうではありません。何が起こるか分かりますか?

4

1 に答える 1

4

私は通常tailを使用しますが、本当に最後の'n'行だけが必要で、フォローすることをあまり気にしない場合(' tail -f'と同様)、最も単純なオプションは次のようになります。

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

deque3行の制約を維持するために、最も古いエントリを破棄して、行ごとに消費します。詳細については、http://docs.python.org/library/collections.html#collections.dequeを参照してください。

于 2012-06-22T11:03:58.377 に答える