当前位置: 代码网 > it编程>前端脚本>Python > python使用watchdog实现文件资源监控

python使用watchdog实现文件资源监控

2025年01月11日 Python 我要评论
python文件监控库watchdogs简介随着python在各种应用领域中的广泛使用,其生态环境也在持续繁荣,特别是各种第三方库的诞生,极大地丰富了开发者的工具箱。在众多库中, watchdog 作

python文件监控库watchdogs简介

随着python在各种应用领域中的广泛使用,其生态环境也在持续繁荣,特别是各种第三方库的诞生,极大地丰富了开发者的工具箱。在众多库中, watchdog 作为一个高效的文件系统监控库,对于实时响应文件系统的各种事件(如文件创建、修改、删除等)提供了极大便利。无论是在需要监控项目文件变化以触发自动化构建的开发场景,还是在需要日志记录、文件备份等运维任务中, watchdog 都能发挥重要的作用。

文件资源监控

安装:pip install watchdog

watchdog 支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,当出现不同变动(新增、删除、修改)后,可进行相应处理。

from time import sleep, strftime
from watchdog.observers import observer
from watchdog.events import filesystemeventhandler
 
 
class filemonitoring(filesystemeventhandler):
    # event.is_directory 判断是否是目录操作
    def on_modified(self, event):  # 文件或文件夹被修改时触发(新增、删除及修改文件或文件夹都会被监测为文件夹的修改)
        tm = strftime("%y-%m-%d %h:%m:%s")
        print(f'{tm} 修改文件夹{event.src_path}')
 
    def on_created(self, event):  # 文件或目录被创建时触发
        tm = strftime("%y-%m-%d %h:%m:%s")
        if event.is_directory:
            print(f'{tm} 创建文件夹{event.src_path}')
        else:
            print(f'{tm} 创建文件{event.src_path}')
 
    def on_deleted(self, event):  # 文件或目录被删除时触发
        tm = strftime("%y-%m-%d %h:%m:%s")
        if event.is_directory:
            print(f'{tm} 删除文件夹{event.src_path}')
        else:
            print(f'{tm} 删除文件{event.src_path}')
 
    def on_moved(self, event):  # 目录的创建和删除操作,被watchdog视为移动操作,因此通过on_moved方法进行捕捉,重命名也可用此捕获。
        tm = strftime("%y-%m-%d %h:%m:%s")
        if event.is_directory:
            print(f'{tm} 重命名文件夹:文件夹{event.src_path} 重命名为 {event.dest_path}')
        else:
            print(f'{tm} 重命名文件:文件{event.src_path} 重命名为  {event.dest_path}')
 
 
class myfilemonitor():
    def __init__(self):
        self.event_handler = filemonitoring()  # 初始化事件处理器实例
 
    def sever(self, watched_dir, recursive: bool = true):
        '''
        :param watched_dir: .schedule 方法设置要监控的目录路径和事件处理器
        :param recursive: recursive=true 参数以递归地监控目录内的所有子目录
        :return:
        '''
        self.observer = observer()  # 初始化观察器
        self.observer.schedule(self.event_handler, watched_dir, recursive=recursive)  # 将事件处理器关联到观察器
        return self.observer
 
    def run(self, watched_dir, recursive: bool = true):
        '''
        启动观察器并进入无限循环,直到用户按下 ctrl+c 中断程序,
        observer.stop() 和 observer.join() 来正确停止和清理观察器资源。
        '''
 
        observer = self.sever(watched_dir, recursive)
        observer.start()
        try:
            while true:
                sleep(.1)
        except keyboardinterrupt:
            observer.stop()
 
        observer.join()

监测文件夹新增、删除、修改文件夹

在python中,watchdog 库确实提供了方便的方式来监控文件夹及其内部文件的新增、删除、修改以及重命名等事件。下面是一个简单的示例,展示如何使用 watchdog 来监听一个文件夹中的这些事件

import time
from watchdog.observers import observer
from watchdog.events import filesystemeventhandler
 
# 定义事件处理器类
class myhandler(filesystemeventhandler):
    def on_modified(self, event):
        print(f'file modified: {event.src_path}')
 
    def on_created(self, event):
        print(f'file created: {event.src_path}')
 
    def on_deleted(self, event):
        print(f'file deleted: {event.src_path}')
 
    # 对于文件夹的创建、删除操作,请注意:
    # 目录级别的事件可通过on_moved方法捕获,因为创建和删除目录也表现为移动事件
    def on_moved(self, event):
        if event.is_directory:
            what = "directory"
        else:
            what = "file"
        print(f'{what} moved: {event.src_path} to {event.dest_path}')
 
# 初始化事件处理器实例
event_handler = myhandler()
 
# 指定要监控的文件夹路径
watched_dir = '/path/to/watch'
 
# 初始化观察器
observer = observer()
 
# 将事件处理器关联到观察器
observer.schedule(event_handler, watched_dir, recursive=true)
 
# 启动观察器
observer.start()
 
print(f'starting to watch {watched_dir} for file system events...')
try:
    while true:
        time.sleep(1)
except keyboardinterrupt:
    observer.stop()
 
observer.join()

在这个例子中,myhandler 类继承了 filesystemeventhandler 并实现了几个方法来处理不同的文件系统事件。on_modified 方法会在文件被修改时触发,on_created 在文件或目录被创建时触发,而 on_deleted 在文件或目录被删除时触发。对于目录的创建和删除操作,由于watchdog将它们视为移动操作,因此通过 on_moved 方法进行捕捉,并检查 event.is_directory 属性以区分是文件还是目录。

通过 observer.schedule 方法设置要监控的目录路径和事件处理器,并设置 recursive=true 参数以递归地监控目录内的所有子目录。

最后启动观察器并进入无限循环,直到用户按下 ctrl+c 中断程序,此时会调用 observer.stop() 和 observer.join() 来正确停止和清理观察器资源。

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

(0)

相关文章:

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

发表评论

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