ここでは新しいファイルが設置されたことを検知するように前のページのプログラムを変更します.具体的には MyHandler クラス内に設置する関数を on_created 関数に変更します.
watch.py
from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
BASE_DIR = Path(__file__).parent
WATCH_DIR = BASE_DIR / "watch"
# ディレクトリを作っておく
WATCH_DIR.mkdir(parents=True, exist_ok=True)
class MyHandler(FileSystemEventHandler):
"""
watchdog が用意している FileSystemEventHandler クラスの継承
「ファイル監視イベントが発生したときに何をするか」を定義する
"""
def on_created(self, event):
print(f"新しいファイル: {event.src_path}")
observer = Observer() # 「監視員を作成する」処理
# 監視条件設定
observer.schedule(
MyHandler(),
path=WATCH_DIR,
recursive=False # とりあえず直下だけを監視
)
observer.start() # 監視を始める → 別スレッド(observerスレッド)が生成される
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("停止します")
observer.stop()
observer.join() # observerスレッドが終わるまで待つ
プログラムを実行し,watch フォルダに2つのファイルを設置してみます.次のとおり,各ファイルについて1つのイベントだけが検知できていることを確認してください.
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>python watch.py ⏎ 新しいファイル: C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md 新しいファイル: C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md Ctrl + C 停止します (py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>