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的dict,set,list,tuple应用详解
Jul 24 Python
详解Python的单元测试
Apr 28 Python
Python+OpenCV实现车牌字符分割和识别
Mar 31 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
python并发和异步编程实例
Nov 15 Python
Python实现八皇后问题示例代码
Dec 09 Python
python基于FTP实现文件传输相关功能代码实例
Sep 28 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
Python extract及contains方法代码实例
Sep 11 Python
python 获取字典键值对的实现
Nov 12 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
pycharm 复制代码出现空格的解决方式
Jan 15 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使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
Python封装原理与实现方法详解
2018/08/28 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
python 6种方法实现单例模式
2020/12/15 Python
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
幼儿如何来做好自我评价
2013/11/05 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
安全保证书范文
2014/04/29 职场文书
销售2014年度工作总结
2014/12/08 职场文书
劳模先进事迹材料
2014/12/24 职场文书
道歉信范文
2015/05/12 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
利用Java连接Hadoop进行编程
2022/06/28 Java/Android