7

メッセージをファイルに記録するプロセスがあります。

これらのログを(ファイルに書き込まれるときに)解析し、関心のある行をフィルタリングして、最初のプロセスの状態に基づいて特定のアクションを実行する別のプロセスを(Pythonで)実装したいと思います。

このようなことをするライブラリがPythonにあるかどうか、先に進んで自分で何かを書く前に、私は疑問に思っていました。

また、このPythonのようなものをどのように実装するかについてのアイデアをいただければ幸いです。

ありがとう。

4

3 に答える 3

18

Cプログラムは通常、現在の位置を探して「ファイルの終わり」フラグをクリアします。しかし、@ 9000が正しく指摘しているように、Pythonがこれを処理しているようです。そのため、ファイルの終わりに達した場合でも、同じファイルから繰り返し読み取ることができます。

ただし、不完全な行には注意が必要な場合があります。アプリケーションがログを分割して書き込む場合は、それらの部分ではなく、行全体を処理するようにする必要があります。次のコードはそれを実現します:

f = open('some.log', 'r')
while True:
    line = ''
    while len(line) == 0 or line[-1] != '\n':
        tail = f.readline()
        if tail == '':
            time.sleep(0.1)          # avoid busy waiting
            # f.seek(0, io.SEEK_CUR) # appears to be unneccessary
            continue
        line += tail
    process(line)
于 2012-08-10T21:10:13.617 に答える
12

実行する必要はありませんtail -f。プレーンなPythonファイルは機能するはずです:

with open('/tmp/track-this') as f:
  while True:
    line = f.readline()
    if line:
      print line

これは、とほぼ同じように機能しtail -fます。別の端末で実行して確認してください。

echo "more" >> /tmp/track-this
# alt-tab here to the terminal with Python and see 'more' printed
echo "even more" >> /tmp/track-this

/tmp/track-thisPythonスニペットを実行する前に作成することを忘れないでください。

適切なアクションを解析して実行するのはあなた次第です。おそらく長いアクションは、別々のスレッド/プロセスで実行する必要があります。

停止条件もあなた次第ですが、普通に^C機能します。

于 2012-08-10T21:05:49.633 に答える
1

答えてくれてありがとう。私もこれを見つけました。 http://www.dabeaz.com/generators/follow.py

于 2012-08-10T21:12:51.727 に答える