2

ファイルを解析する 2 つの Python スクリプトを作成しています。1 つは標準の UNIX ログ ファイルで、もう 1 つはバイナリ ファイルです。これらを監視する最善の方法を見つけようとしているので、更新されたらすぐにデータを読み取ることができます。これまでに見つけた解決策のほとんどは Linux 固有のものですが、FreeBSD で動作させるにはこれが必要です。

明らかに、X 回ごとにスクリプトを実行するのが 1 つの方法ですが、これは総体的で非効率的です。Python アプリをバックグラウンドで継続的に実行してファイルを監視し、ファイルが変更/更新されたときにそれを処理する場合、最善の策は何ですか?

4

2 に答える 2

2

Python で構築されたパーサーの一種のデーモン プロセスを作成したことがあります。一連のファイルを監視して Python で処理する必要があり、真のマルチ OS ソリューション (この場合は Windows と Linux) である必要がありました。ファイルの変更時刻をチェックしてファイルのリストを監視するプログラムを作成しました。プログラムはしばらくスリープ状態になり、監視対象のファイルの変更時刻を確認します。変更時刻が以前に登録された時刻よりも新しい場合、ファイルは変更されているため、このファイルを処理する必要があります。

このようなもの:

import os
import time

path = os.path.dirname(__file__)
print "Looking for files in", path, "..."

# get interesting files
files = [{"file" : f} for f in os.listdir(path) if os.path.isfile(f) and os.path.splitext(f)[1].lower() == ".src"]
for f in files:
    f["output"] = os.path.splitext(f["file"])[0] + ".out"
    f["modtime"] = os.path.getmtime(f["file"]) - 10
    print "  watching:", f["file"]


while True:
    # sleep for a while
    time.sleep(0.5)
    # check if anything changed
    for f in files:
        # is mod time of file is newer than the one registered?
        if os.path.getmtime(f["file"]) > f["modtime"]: 
            # store new time and...
            f["modtime"] = os.path.getmtime(f["file"])
            print f["file"], "has changed..."
            # do your stuff here

一流のコードのようには見えませんが、非常にうまく機能します。

これについては他にも SO の質問がありますが、あなたの質問に対する直接的な回答が得られるかどうかはわかりません。

tail -Fに相当するpythonicを実装するには?

ファイルの変更を監視するにはどうすればよいですか?

ファイルの変更/変更を「監視」するにはどうすればよいですか?

お役に立てれば!

于 2011-03-29T18:42:15.453 に答える
2

KQueue イベントを試しましたか?

http://docs.python.org/library/select.html#kqueue-objects

kqueue は inotify (ファイル変更通知サービス) の FreeBSD / OS バージョンです。私はこれを使用していませんが、あなたが望むものだと思います。

于 2011-03-30T11:10:46.837 に答える