python中文件变化监控示例(watchdog)


Posted in Python onOctober 16, 2017

在python中文件监控主要有两个库,一个是pyinotify ( https://github.com/seb-m/pyinotify/wiki ),一个是watchdog(http://pythonhosted.org/watchdog/)。pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装。因为我主要用于Windows平台,所以下面着重介绍watchdog(推荐大家阅读一下watchdog实现源码,有利于深刻的理解其中的原理)。

watchdog在不同的平台使用不同的方法进行文件检测。在init.py中发现了如下注释:

|Inotify| Linux 2.6.13+ ``inotify(7)`` based observer
|FSEvents| Mac OS X FSEvents based observer
|Kqueue| Mac OS X and BSD with kqueue(2) ``kqueue(2)`` based observer
|WinApi|(ReadDirectoryChangesW) MS Windows Windows API-based observer
|Polling| Any fallback implementation

给出示例代码如下:

from watchdog.observers import Observer
from watchdog.events import *
import time

class FileEventHandler(FileSystemEventHandler):
def __init__(self):
FileSystemEventHandler.__init__(self)

def on_moved(self, event):
if event.is_directory:
print("directory moved from {0} to {1}".format(event.src_path,event.dest_path))
else:
print("file moved from {0} to {1}".format(event.src_path,event.dest_path))

def on_created(self, event):
if event.is_directory:
print("directory created:{0}".format(event.src_path))
else:
print("file created:{0}".format(event.src_path))

def on_deleted(self, event):
if event.is_directory:
print("directory deleted:{0}".format(event.src_path))
else:
print("file deleted:{0}".format(event.src_path))

def on_modified(self, event):
if event.is_directory:
print("directory modified:{0}".format(event.src_path))
else:
print("file modified:{0}".format(event.src_path))

if __name__ == "__main__":
observer = Observer()
event_handler = FileEventHandler()
observer.schedule(event_handler,"d:/dcm",True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()

watchdog主要采用观察者模型(废话,从变量命名就可以看出来)。主要有三个角色:observer,event_handler,被监控的文件夹。三者原本是独立的,主要通过observer.schedule函数将三者串起来,意思为observer不断检测调用平台依赖代码对监控文件夹进行变动检测,当发现改变时,通知event_handler处理。最后特别推荐读者有时间可以阅读一下watchdog的源码,写的易懂而且架构很好。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python共享引用(多个变量引用)示例代码
Dec 04 Python
python线程锁(thread)学习示例
Dec 04 Python
python图像处理之反色实现方法
May 30 Python
Django返回json数据用法示例
Sep 18 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
python flask实现分页的示例代码
Aug 02 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
python中import reload __import__的区别详解
Oct 16 #Python
使用Python操作excel文件的实例代码
Oct 15 #Python
python出现"IndentationError: unexpected indent"错误解决办法
Oct 15 #Python
python 二分查找和快速排序实例详解
Oct 13 #Python
Python实现的排列组合计算操作示例
Oct 13 #Python
python numpy函数中的linspace创建等差数列详解
Oct 13 #Python
Python配置mysql的教程(推荐)
Oct 13 #Python
You might like
随机广告显示(PHP函数)
2006/10/09 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Python获取当前路径实现代码
2017/05/08 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python区块及区块链的开发详解
2019/07/03 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
python实现程序重启和系统重启方式
2020/04/16 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
python实现数字炸弹游戏程序
2020/07/17 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
python实现简单遗传算法
2020/09/18 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
不拖欠农民工工资承诺书
2014/03/31 职场文书
2014年教师节活动总结
2014/08/29 职场文书
解除劳动合同证明书
2014/09/26 职场文书
首次购房证明
2015/06/19 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
PHP中->和=>的意思
2021/03/31 PHP