当前位置: 代码网 > it编程>前端脚本>Python > Python使用watchdog实时监测文件或文件夹的更改

Python使用watchdog实时监测文件或文件夹的更改

2026年03月10日 Python 我要评论
1 概述python实现实时监控文件的创建、修改、删除操作跟踪文件夹内容的增删改变化可用于文件发生变化时自动触发相应处理逻辑实现热重载机制,如配置文件更新后自动重新加载基于watchdog 实现;wa

1 概述

  • python实现实时监控文件的创建、修改、删除操作
  • 跟踪文件夹内容的增删改变化
  • 可用于文件发生变化时自动触发相应处理逻辑
  • 实现热重载机制,如配置文件更新后自动重新加载

基于watchdog 实现;

  • watchdog 是一个用于监控文件系统事件的 python 库,它能够监听文件或目录的变化,如创建、修改、删除和移动等操作。这个库在需要实时响应文件系统变化的场景中非常有用,比如自动构建系统、日志监控、文件同步工具等。
  • 主要组件
    • observer:观察者对象,负责监控指定路径的文件系统事件。它会持续运行一个后台线程来监听事件。
    • filesystemeventhandler:事件处理器基类,用户需要继承这个类并重写相应的事件处理方法来定义对特定事件的响应。
    • event:事件对象,代表一个具体的文件系统事件,包含了事件类型和相关文件路径等信息。

典型应用场景

  1. 开发工具
    • 代码编辑器监听源文件变化实现自动刷新
    • 构建工具监听源码变更触发重新编译
  2. 文件同步服务
    • 监控本地文件夹变化同步到云端
    • 实现文件实时备份功能
  3. 系统管理
    • 监控配置文件变化并动态调整程序行为
    • 跟踪重要目录的安全变更记录

2 安装watchdog

  • 使用命令行pip install watchdog进行安装;
pip install watchdog

3 使用示例

监测文件夹更改

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"文件被创建: {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()

监测指定文件更改

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秒内只响应一次
        if now - self.last_modified > 1:
            print(f"文件被修改: {event.src_path}")
            self.last_modified = now

    def on_created(self, event):
        print(f"文件被创建: {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++ 等)在保存文件时,可能会执行多步操作(如写入临时文件、替换原文件、修改元数据等),导致 watchdog 检测到多次文件系统事件
  • 事件去抖动(防抖):在短时间内多次事件只处理一次。

到此这篇关于python使用watchdog实时监测文件或文件夹更改的文章就介绍到这了,更多相关python watchdog监测文件/文件夹更改内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com