python 看门狗watchdog: 文件变化监测系统
0 背景
在一些开发场景下, 我们需要即使监听一些项目文件夹下文件的变化而做出及时相应的逻辑处理, 比如, 实时监听下载文件夹中有文件新增或修改的时候, 我就去将文件上传到百度网盘, 当日志文件夹有更新时, 我可能就需要及时汇总到日志系统里面去, 当文件被删除时, 及时通过微信消息通知我.
watchdog
是一个 Python 的第三方库,用于监视文件系统中文件和目录的变化,并在这些变化发生时触发自定义操作。它是一个强大高效的的工具,可以用于实时监控文件夹,比如, 在文件被创建、修改、删除、重命名时我们执行我们需求的逻辑代码, 以此满足我们特定的需求。
1 安装
通过pip命令安装watchdog
pip install watchdog
2 使用
我们创建一个文件监控系统, 实现以下功能: 当文件被新建 & 重命名 & 删除 & 修改时, 执行相应的逻辑函数.
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
'''在文件被修改时执行的操作'''
if event.is_directory:
return
print(f'File {event.src_path} has been modified.')
def on_created(self, event):
'''在文件被创建时执行的操作'''
if event.is_directory:
return
print(f'File {event.src_path} has been created.')
def on_deleted(self, event):
'''在文件被删除时执行的操作'''
if event.is_directory:
return
print(f'File {event.src_path} has been deleted.')
def on_moved(self, event):
'''在文件被重命名时执行的操作'''
if event.is_directory:
return
print(f'File {event.src_path} has been renamed to {event.dest_path}.')
path = "./data"
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()
MyHandler
继承于FileSystemEventHandler
对象, 重写了on_modified
等方法, 当我对.data
目录下面做了一些增删改重命名的操作时, 它按照MyHandler
对象的对应的函数做了相应的提示, 当然, 在实际操作中, 我们还是需要根据我们的具体需求扩展代码,执行更复杂的操作,例如在文件变化时触发特定的业务逻辑或通知。
D:softwarepython_envenv_testScriptspython.exe E:/files/看门狗/main.py
File ./data新建文本文档.txt has been created.
File ./data新建文本文档.txt has been renamed to ./datatest.txt.
File ./datatest.txt has been modified.
File ./datatest.txt has been modified.
File ./datatest.txt has been modified.
File ./datatest.txt has been modified.
File ./datatest - 副本.txt has been created.
File ./datatest - 副本.txt has been modified.
File ./datatest - 副本 - 副本.txt has been created.
File ./datatest - 副本 - 副本.txt has been modified.
File ./datatest - 副本 - 副本.txt has been deleted.
如果是在linux上, 我们可以使用nohup
命令, 将脚本后台挂起, 这样, 文件变化监听系统就可以在后台运行了.
nohup python3 watch_main.py > watch_folder.log 2>&1 &
3 关于
欢迎关注我的个人公众号
原文始发于微信公众号(其之):python 看门狗watchdog: 文件变化监测系统
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204942.html