ホームページ  >  記事  >  バックエンド開発  >  Python でのファイル変更監視ウォッチドッグの例

Python でのファイル変更監視ウォッチドッグの例

黄舟
黄舟オリジナル
2017-10-16 11:03:282241ブラウズ

この記事では主にPythonでのファイル変更監視サンプル(ウォッチドッグ)を紹介していますが、編集者が非常に良いと思ったので参考として共有させていただきます。エディターをフォローして見てみましょう

Python にはファイル監視用の主なライブラリが 2 つあります。1 つは pyinotify (https://github.com/seb-m/pyinotify/wiki) で、もう 1 つは watchdog (http:/) です。 /pythonhosted.org/watchdog/)。 pyinotify は、さまざまなプラットフォーム上のイベントをカプセル化する Linux プラットフォームの inotify に依存しています。私は主に Windows プラットフォームでウォッチドッグを使用しているため、以下ではウォッチドッグに焦点を当てます (原理を深く理解するのに役立つウォッチドッグ実装のソース コードを読むことをお勧めします)。

watchdog は、異なるプラットフォームで異なる方法を使用してファイルを検出します。次のコメントが init.py で見つかりました:


|Inotify| Linux 2.6.13+ ``inotify(7)`` based observer
|FSEvents| Mac OS X FSEvents based observer
|Kqueue| Mac OS X and BSD with kqueue(2) ``kqueue(2)`` based observer
|WinApi|(ReadDirectoryChangesW) MS Windows Windows API-based observer
|Polling| Any fallback implementation

サンプル コードは次のとおりです:


from watchdog.observers import Observer
from watchdog.events import *
import time

class FileEventHandler(FileSystemEventHandler):
def __init__(self):
FileSystemEventHandler.__init__(self)

def on_moved(self, event):
if event.is_directory:
print("directory moved from {0} to {1}".format(event.src_path,event.dest_path))
else:
print("file moved from {0} to {1}".format(event.src_path,event.dest_path))

def on_created(self, event):
if event.is_directory:
print("directory created:{0}".format(event.src_path))
else:
print("file created:{0}".format(event.src_path))

def on_deleted(self, event):
if event.is_directory:
print("directory deleted:{0}".format(event.src_path))
else:
print("file deleted:{0}".format(event.src_path))

def on_modified(self, event):
if event.is_directory:
print("directory modified:{0}".format(event.src_path))
else:
print("file modified:{0}".format(event.src_path))

if __name__ == "__main__":
observer = Observer()
event_handler = FileEventHandler()
observer.schedule(event_handler,"d:/dcm",True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()

watchdog は主にオブザーバー モデルを使用します (ナンセンスです。変数の名前からわかります)。主な役割は、オブザーバー、イベント ハンドラー、監視フォルダーの 3 つです。 3 つは元々独立しており、主に Observer.schedule 関数を介して接続されています。つまり、オブザーバーは継続的にプラットフォーム依存のコードを検出して呼び出し、監視フォルダー内の変更が検出されると、event_handler に処理のために通知されます。 。最後に、時間があるときにウォッチドッグのソース コードを読むことを強くお勧めします。これは理解しやすく、優れた構造を持っています。

以上がPython でのファイル変更監視ウォッチドッグの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。