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中的数据类型
May 05 Python
python实现感知器算法(批处理)
Jan 18 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
python分割一个文本为多个文本的方法
Jul 22 Python
python datetime中strptime用法详解
Aug 29 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
简单了解Django项目应用创建过程
Jul 06 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
May 14 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中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
php5与php7的区别点总结
2019/10/11 PHP
JS控制表格隔行变色
2006/06/26 Javascript
在线游戏大家来找茬II
2006/09/30 Javascript
javascript 数组学习资料收集
2010/04/11 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
求职信写作要突出重点
2014/01/01 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
乔迁之喜主持词
2014/03/27 职场文书
青年文明号创建承诺
2014/03/31 职场文书
小学新学期寄语
2014/04/02 职场文书
教师对学生的寄语
2014/04/03 职场文书
交通事故私了协议书
2014/04/16 职场文书
给校长的建议书500字
2014/05/15 职场文书
珍惜资源的建议书
2014/08/26 职场文书
唐山大地震的观后感
2015/06/05 职场文书
详解NodeJS模块化
2021/06/15 NodeJs
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL