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中yield生成器的用法
Aug 05 Python
浅谈五大Python Web框架
Mar 20 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python pandas修改列属性的方法详解
Jun 09 Python
python基础梳理(一)(推荐)
Apr 06 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
python实现贪吃蛇游戏源码
Mar 21 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
Python reques接口测试框架实现代码
Jul 28 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
浅谈javascript的调试
2015/01/28 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
python中scikit-learn机器代码实例
2018/08/05 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
python实现简易数码时钟
2021/02/19 Python
基于python操作ES实例详解
2019/11/16 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
标准版离职证明书
2014/09/12 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
党员民主生活会材料
2014/12/15 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL