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 相关文章推荐
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
python绘图方法实例入门
May 19 Python
Python 迭代器与生成器实例详解
May 18 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
python对Excel的读取的示例代码
Feb 14 Python
Python 在局部变量域中执行代码
Aug 07 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
Python中的面向接口编程示例详解
Jan 17 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
农村婚庆司仪主持词
2014/03/15 职场文书
销售团队口号大全
2014/06/06 职场文书
小学生环保标语
2014/06/13 职场文书
物业保安岗位职责
2014/07/02 职场文书
技术股份合作协议书
2014/10/05 职场文书
买房协议书范本
2014/10/23 职场文书
文艺委员竞选稿
2015/11/19 职场文书
广告文案的撰写技巧(实用干货)
2019/08/23 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers