Python のコード watch.py を次のとおり作成します.コードが設置されたフォルダに watch フォルダを作成します.コードを実行している間に watch フォルダにファイルを設置したり,編集したり,削除したりした場合にそのことを検知することができます.なお,pathlib に関する説明はこちらを参照してください.
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_any_event(self, event):
print(event.event_type, 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スレッドが終わるまで待つ
コードの作成ができたら,次のコマンドで実行します.プログラムは Ctrl + C を押すまで実行状態が続きます.つまりプロンプトが返ってこない状態になります.また,実行時に watch フォルダが存在しなければ自動的に作成されているはずです.
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>python watch.py ⏎
プログラムの実行中に watch フォルダに任意のファイルを手作業で配置します.例えば,「sample1.md」と「sample2.md」を作成した後,まとめて削除すると,次のようなイベントを検知することができました.
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> python watch.py
created C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
modified C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
modified C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
attrib C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
created C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md
modified C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md
attrib C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md
deleted C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
deleted C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md
Ctrl + C
停止します
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>
最後に Ctrl + C で実行を終了します.ファイルを設置したときに created,modified,attrib という複数のイベントタイプが発生し,削除したときには deleted というイベントタイプが発生していることがわかります.
今回の目標を実現するには新たなファイルの設置イベントだけを取得できたら良いでしょう.したがって,次のページでは created イベントだけを取得してみます.