python 看门狗watchdog: 文件变化监测系统¶
0 背景¶
在一些开发场景下, 我们需要即使监听一些项目文件夹下文件的变化而做出及时相应的逻辑处理, 比如, 实时监听下载文件夹中有文件新增或修改的时候, 我就去将文件上传到百度网盘, 当日志文件夹有更新时, 我可能就需要及时汇总到日志系统里面去, 当文件被删除时, 及时通过微信消息通知我.
watchdog 是一个 Python 的第三方库,用于监视文件系统中文件和目录的变化,并在这些变化发生时触发自定义操作。它是一个强大高效的的工具,可以用于实时监控文件夹,比如, 在文件被创建、修改、删除、重命名时我们执行我们需求的逻辑代码, 以此满足我们特定的需求。
1 安装¶
通过pip命令安装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:\software\python_env\env_test\Scripts\python.exe E:/files/看门狗/main.py
File ./data\新建文本文档.txt has been created.
File ./data\新建文本文档.txt has been renamed to ./data\test.txt.
File ./data\test.txt has been modified.
File ./data\test.txt has been modified.
File ./data\test.txt has been modified.
File ./data\test.txt has been modified.
File ./data\test - 副本.txt has been created.
File ./data\test - 副本.txt has been modified.
File ./data\test - 副本 - 副本.txt has been created.
File ./data\test - 副本 - 副本.txt has been modified.
File ./data\test - 副本 - 副本.txt has been deleted.

如果是在linux上, 我们可以使用nohup 命令, 将脚本后台挂起, 这样, 文件变化监听系统就可以在后台运行了.
3 关于¶
欢迎关注我的个人公众号¶
