Pythonでwatchdogを用いてファイルシステムの変更を監視するためのプロセスを実行する

スポンサーリンク

Pythonでwatchdogを用いてファイルシステムの変更を監視するためのプロセスを実行してみます。

今回はwatchdogを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows11)

■監視対象のディレクトリを設定します。

まずは監視対象のディレクトリを設定します。

今回は「C:\Users\user_\test_1(フォルダパス)」というディレクトリを作成しました。

■watchdogを用いてファイルシステムの変更を監視するためのプロセスを実行する

では、次にwatchdogを用いてファイルシステムの変更を監視するためのプロセスを実行するスクリプトを書いていきます。

■コード

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

# カスタムのイベントハンドラを作成します
class MyEventHandler(FileSystemEventHandler):
    def on_created(self, event):
        if not event.is_directory:
            print(f"作成されたファイル: {event.src_path}")

    def on_modified(self, event):
        if not event.is_directory:
            print(f"変更されたファイル: {event.src_path}")

    def on_deleted(self, event):
        if not event.is_directory:
            print(f"削除されたファイル: {event.src_path}")

# 監視対象のディレクトリを設定します
path = r'C:\Users\user_\test_1'
# Observerを作成し、イベントハンドラを登録します
event_handler = MyEventHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)

# 監視を開始します
observer.start()

try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    # Ctrl+Cが押された場合は監視を停止します
    observer.stop()

# 監視を終了します
observer.join()

今回は必要なモジュールとクラスをインポートします。今回はtimeモジュール、これは1秒ごとの待機時間を作るために使用されます。watchdogモジュールからは、ファイルシステムのイベントを監視するためのクラスと関数が提供されています。具体的には、ObserverクラスとFileSystemEventHandlerクラスが使用されています。

次に、カスタムのイベントハンドラクラス MyEventHandler を定義しています。このクラスは、FileSystemEventHandler クラスを継承しており、ファイルの作成、変更、削除のイベントが発生した場合にそれぞれ対応するメソッドが呼び出されます。各イベントメソッドでは、イベントがディレクトリではなくファイルに関連している場合にのみ、イベントの発生したファイルのパスを表示します。

次に、監視対象のディレクトリパスを指定しています。path変数には、監視したいディレクトリのパスを指定します。なお、今回は「C:\Users\user_\test_1」となります。

その後、MyEventHandlerクラスのインスタンスを作成し、Observerクラスのインスタンスを生成します。observer.schedule()メソッドを使用して、イベントハンドラを登録し、監視するディレクトリを指定します。recursive=Trueは、サブディレクトリ内の変更も監視するために指定しています。

observer.start()を呼び出すことで、監視プロセスが開始されます。その後、無限ループが開始され、time.sleep(1)によって1秒ごとに待機します。ループはKeyboardInterrupt例外(Ctrl+Cが押された場合)まで続けられます。

KeyboardInterruptが発生すると、observer.stop()が呼び出されて監視が停止されます。

最後に、observer.join()を呼び出して、監視プロセスが終了するのを待ちます。これにより、プロセスが完全に終了するまでメインスレッドがブロックされます。

■検証・実行

今回書いたスクリプトを「f_h.py」という名前でPythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると何も表示されませんがプログラムは実行してみますので、コマンドプロンプトを開いたままで、監視対象となっているディレクトリに移動し検証のため、新しいテキストファイルを置いてみます。

置いた後にコマンドプロンプトを確認すると、上記のメッセージが表示されていることを確認できました。

他にも監視対象となっているディレクトリ内でファイルの変更、削除を行いましたが監視されていることを確認できました。

コメント

タイトルとURLをコピーしました