🐶 什麼是 Watchdog?
Watchdog 是一個 Python 套件,用來即時監控檔案系統的變化。它可以在資料夾內有「新增」、「修改」、「刪除」等事件時,立即觸發事件處理函式,不需要手動輪詢 (polling
),效率高又省資源。
✅ Watchdog 的特點:
- 採用 OS 層級的檔案通知機制(如 Windows 的
ReadDirectoryChangesW
、Linux 的inotify
) - 支援各種作業系統:Windows / macOS / Linux
- 可監控檔案或資料夾的:
- 新增 (on_created)
- 修改 (on_modified)
- 刪除 (on_deleted)
- 重新命名 (on_moved)
- 常見應用:
- 檔案備份系統
- 即時影像處理
- 檔案轉檔或模型推論觸發器
- 自動同步資料
📂 使用 Watchdog 偵測資料夾是否新增圖像檔案並自動讀取
以下教你使用 Watchdog 監控特定資料夾,當有新圖像檔(如 .jpg
, .png
等)產生時,立即使用 Pillow (PIL
) 套件讀取顯示圖像。
🐶 使用 Watchdog 即時偵測資料夾新增圖像檔案
🔧 安裝 Watchdog
先安裝 watchdog:pip install watchdog
✅ watchdog
的完整範例程式碼:
import os
from PIL import Image
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# 📂 設定要監控的資料夾
watch_folder = "C:/Users/yourname/Pictures/monitor_folder" # ← 改成你自己的路徑
# 支援的圖檔副檔名
image_extensions = {'.jpg', '.jpeg', '.png', '.bmp', '.gif'}
# 📌 自定義事件處理器
class ImageHandler(FileSystemEventHandler):
def on_created(self, event):
if not event.is_directory:
_, ext = os.path.splitext(event.src_path)
if ext.lower() in image_extensions:
print(f"🖼️ 偵測到新圖像:{event.src_path}")
try:
img = Image.open(event.src_path)
img.show() # 可改成其他處理邏輯
except Exception as e:
print(f"⚠️ 圖像開啟失敗:{e}")
# 📡 建立 Observer 並啟動監控
if __name__ == "__main__":
event_handler = ImageHandler()
observer = Observer()
observer.schedule(event_handler, path=watch_folder, recursive=False)
observer.start()
print("🚀 Watchdog 已啟動,監控資料夾:", watch_folder)
try:
while True:
pass # 或 time.sleep(1)
except KeyboardInterrupt:
observer.stop()
print("\n🛑 Watchdog 停止監控")
observer.join()
🧰 實際測試
在D槽創建一個資料夾image\watch_dog。

實際丟一張圖進去


🔍 說明與重點
✅ Watchdog 主要元件與常用函式說明
📦 FileSystemEventHandler
(事件處理器基底類別)
- 來源:
from watchdog.events import FileSystemEventHandler
- 你可以繼承此類別,自訂要處理的檔案事件
- 可覆寫的事件函式:
- 📁 on_created(self, event) → 檔案或資料夾被建立時觸發
- ✏️ on_modified(self, event) → 檔案被修改時觸發
- ❌ on_deleted(self, event) → 檔案被刪除時觸發
- 🔄 on_moved(self, event) → 檔案被搬移或重新命名時觸發
- ✅ 你只需要覆寫你想處理的事件,例如只監控「新增」就只寫
on_created
👀 Observer
(觀察器)
- 來源:
from watchdog.observers import Observer
- 負責啟動與執行檔案系統的監控(在背景 Thread 中執行)
- 可以同時綁定多個處理器與路徑
- 提供
.start()
、.stop()
、.join()
等控制方法
🧩 observer.schedule()
(註冊處理器)
- 功能:將你定義的事件處理器綁定到指定資料夾上
- 語法:
observer.schedule(event_handler, path=資料夾路徑, recursive=False)
- 參數說明:
- event_handler:你繼承自 FileSystemEventHandler 的物件實例
- path:監控的目標資料夾(字串)
- recursive:是否也監控子資料夾(預設 False)
⚡ on_created(self, event)
(常用事件函式)
- 當指定資料夾中出現「新檔案或資料夾」時會觸發此函式
- 常用用途:偵測新檔案並立即讀取、處理、轉換等
- 建議搭配:
- event.src_path → 取得新檔案完整路徑
- os.path.splitext() → 判斷副檔名
- os.path.isfile() → 確認是否為檔案
- ⚠️ 注意事項:
- 事件觸發不保證檔案已寫入完成,建議加上延遲或 try-except 機制避免讀取失敗
🧾 事件物件 (event
) 常用屬性說明
當你覆寫事件方法(如 on_created(self, event)
)時,event
是會自動傳入的參數物件,包含關於該事件的詳細資訊。
📌 常用屬性:
- 📍 event.src_path
被觸發事件的完整檔案路徑(字串格式)
👉 可用來直接開啟或判斷是哪個檔案觸發事件 - 📁 event.is_directory
判斷是否為資料夾(布林值:True
表資料夾,False
表檔案)
👉 常用來「只處理檔案」而忽略資料夾事件 - 🏷️ type(event)
傳回事件的類別型別,例如:FileCreatedEvent
,DirCreatedEvent
👉 可進一步針對不同事件型別做特殊處理或記錄
✅ Watchdog 支援的平台
- ✅ Windows
- ✅ macOS
- ✅ Linux
🐍 Python 支援版本
- Watchdog 支援 Python 3.6~3.12,你用的 Python 3.8 非常適合。
📌 其他補充(可選功能)
- 若需同時處理修改事件,可加上
on_modified(self, event)
- 若需監控子目錄:
recursive=True
- 可結合
threading
或 async 架構做更進階應用