リアルタイムモニタlogファイル

2796 ワード

プロセスが実行され、logを書き続けているので、logファイルの更新(一般的にdebugで使用される)をリアルタイムで監視する必要があります.どうすればいいですか.絶えず開いて、ファイルを閉じますか.いいえ、少なくとも2つの方法があります.2つの一般的なコマンドから来ています.
  • tail -f log.txt、もう一つのプロセスはlogを書いていますが、tailを使うと、新しいコンテンツ
  • をリアルタイムで印刷することができます.
  • less log.txt、そして更新をモニタする場合はFを押し、モニタを一時停止する場合はCTRL+Cを押すと、ページを上下にめくって表示し、モニタを続けてFを押すことができます.この機能はtailよりも強いです.

  • 簡単にシミュレーションできます.
  • は、1つのshellでファイルを更新し続けます.
     $ count=1; while true; do echo hello, world $count >> log.txt; count=$(($count+1)); sleep 1s; done

  • 別のshellでtail-f log.txt or less log.txt

  •  
    tailのようなプログラムを書くのも簡単です.
    # Notices:
    # 1. the 3rd parameter of open() is to disable file buffering
    #      so file updated by another process could be picked up correctly
    #      but since your focus is newly added tail, enable buffering is ok too
    # 2. It is not necessary to fh.tell() to save the position, and then seek()
    #     to resume, as if readline() failed, the pointer stay still at the EOF
    
    import sys
    import time
    
    filename = sys.argv[1]
    
    with open(filename, 'r', 0) as fh:
        while True:
            line = fh.readline()
            if not line:
                time.sleep(1)
            else:
                print line

    これはいい面接問題にすることができます.