Python使用watchdog實時監(jiān)測文件或文件夾的更改
更新時間:2026年03月10日 09:22:08 作者:mahuifa
這篇文章主要介紹了如何使用Python的watchdog庫來實時監(jiān)控文件和文件夾的創(chuàng)建、修改、刪除操作,實現(xiàn)熱重載機制和其他應用場景,需要的朋友可以參考下
1 概述
- python實現(xiàn)實時監(jiān)控文件的創(chuàng)建、修改、刪除操作
- 跟蹤文件夾內(nèi)容的增刪改變化
- 可用于文件發(fā)生變化時自動觸發(fā)相應處理邏輯
- 實現(xiàn)熱重載機制,如配置文件更新后自動重新加載
基于watchdog 實現(xiàn);
- watchdog 是一個用于監(jiān)控文件系統(tǒng)事件的 Python 庫,它能夠監(jiān)聽文件或目錄的變化,如創(chuàng)建、修改、刪除和移動等操作。這個庫在需要實時響應文件系統(tǒng)變化的場景中非常有用,比如自動構建系統(tǒng)、日志監(jiān)控、文件同步工具等。
- 主要組件
- Observer:觀察者對象,負責監(jiān)控指定路徑的文件系統(tǒng)事件。它會持續(xù)運行一個后臺線程來監(jiān)聽事件。
- FileSystemEventHandler:事件處理器基類,用戶需要繼承這個類并重寫相應的事件處理方法來定義對特定事件的響應。
- Event:事件對象,代表一個具體的文件系統(tǒng)事件,包含了事件類型和相關文件路徑等信息。
典型應用場景
- 開發(fā)工具
- 代碼編輯器監(jiān)聽源文件變化實現(xiàn)自動刷新
- 構建工具監(jiān)聽源碼變更觸發(fā)重新編譯
- 文件同步服務
- 監(jiān)控本地文件夾變化同步到云端
- 實現(xiàn)文件實時備份功能
- 系統(tǒng)管理
- 監(jiān)控配置文件變化并動態(tài)調(diào)整程序行為
- 跟蹤重要目錄的安全變更記錄
2 安裝watchdog
- 使用命令行
pip install watchdog進行安裝;
pip install watchdog
3 使用示例
監(jiān)測文件夾更改
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print(f"文件被修改: {event.src_path}")
def on_created(self, event):
print(f"文件被創(chuàng)建: {event.src_path}")
def on_deleted(self, event):
print(f"文件被刪除: {event.src_path}")
if __name__ == "__main__":
path = "./"
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
監(jiān)測指定文件更改
import time
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def __init__(self, target_file):
self.target_file = os.path.abspath(target_file)
self.last_modified = 0
def dispatch(self, event):
if os.path.abspath(event.src_path) == self.target_file:
super().dispatch(event)
def on_modified(self, event):
now = time.time()
# 1秒內(nèi)只響應一次
if now - self.last_modified > 1:
print(f"文件被修改: {event.src_path}")
self.last_modified = now
def on_created(self, event):
print(f"文件被創(chuàng)建: {event.src_path}")
def on_deleted(self, event):
print(f"文件被刪除: {event.src_path}")
if __name__ == "__main__":
target_file = "test.txt"
path = os.path.dirname(os.path.abspath(target_file)) or "."
event_handler = MyHandler(target_file)
observer = Observer()
observer.schedule(event_handler, path, recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
- 因為許多編輯器(如 VS Code、Notepad++ 等)在保存文件時,可能會執(zhí)行多步操作(如寫入臨時文件、替換原文件、修改元數(shù)據(jù)等),導致 watchdog 檢測到多次文件系統(tǒng)事件
- 事件去抖動(防抖):在短時間內(nèi)多次事件只處理一次。
到此這篇關于Python使用watchdog實時監(jiān)測文件或文件夾更改的文章就介紹到這了,更多相關Python watchdog監(jiān)測文件/文件夾更改內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python使用tablib生成excel文件的簡單實現(xiàn)方法
這篇文章主要介紹了Python使用tablib生成excel文件的方法,結合實例形式分析了tablib模塊的相關使用技巧,需要的朋友可以參考下2016-03-03
Python處理JSON的完全指南:從基礎到實戰(zhàn),掌握數(shù)據(jù)交換核心技能
本文將從?JSON?與?Python?的類型映射講起,帶你理解序列化與反序列化的底層邏輯,然后通過實戰(zhàn)案例演示如何解析?API?數(shù)據(jù)、處理自定義對象,最后總結出?3?個避坑技巧2026-06-06
Python環(huán)境Pillow( PIL )圖像處理工具使用解析
這篇文章主要介紹了Python環(huán)境Pillow( PIL )圖像處理工具使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09

