简单了解Python下用于监视文件系统的pyinotify包


Posted in Python onNovember 13, 2015

什么是inotify:

  •   Inotify是一个事件驱动的通知机制,Inotify 提供一个简单的API,使用最小的文件描述符,并且允许细粒度监控。与 inotify 的通信是通过系统调用实现。可用的函数如下所示:
  •   inotify_init  是用于创建一个inotify实例的系统调用,并返回一个指向该实例的文件描述符。
  •   inotify_init1  与inotify_init相似,并带有附加标志。如果这些附加标志没有指定,将采用与inotify_init相同的值。
  •   inotify_add_watch 增加对文件或者目录的监控,并指定需要监控哪些事件。标志用于控制是否将事件添加到已有的监控中,是否只有路径代表一个目录才进行监控,是否要追踪符号链接,是否进行一次性监控,当首次事件出现后就停止监控。
  •   inotify_rm_watch 从监控列表中移出监控项目。
  •   read 读取包含一个或者多个事件信息的缓存。
  •   close 关闭文件描述符,并且移除所有在该描述符上的所有监控。当关于某实例的所有文件描述符都关闭时,资源和下层对象都将释放,以供内核再次使用。

因此,典型的监控程序需要进行如下操作:

  •   使用 inotify_init 打开一个文件描述符
  •   添加一个或者多个监控
  •   等待事件
  •   处理事件,然后返回并等待更多事件
  •   当监控不再活动时,或者接到某个信号之后,关闭文件描述符,清空,然后退出。

pyinotify包的安装

git clone https://github.com/seb-m/pyinotify.git
cd pyinotify/
python setup.py install

Inotify 可以监视的文件系统事件包括:

IN_ACCESS,即文件被访问
IN_MODIFY,文件被write
IN_ATTRIB,文件属性被修改,如chmod、chown、touch等
IN_CLOSE_WRITE,可写文件被close
IN_CLOSE_NOWRITE,不可写文件被close
IN_OPEN,文件被open
IN_MOVED_FROM,文件被移走,如mv
IN_MOVED_TO,文件被移来,如mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT,宿主文件系统被umount
IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)

pyinotify使用例子

#!/usr/bin/env python
# encoding:utf-8
 
import os
from pyinotify import WatchManager, Notifier, \
ProcessEvent,IN_DELETE, IN_CREATE,IN_MODIFY
 
class EventHandler(ProcessEvent):
 """事件处理"""
 def process_IN_CREATE(self, event):
  print  "Create file: %s " %  os.path.join(event.path,event.name)
 
 def process_IN_DELETE(self, event):
  print  "Delete file: %s " %  os.path.join(event.path,event.name)

 def process_IN_MODIFY(self, event):
   print  "Modify file: %s " %  os.path.join(event.path,event.name)
 
def FSMonitor(path='.'):
  wm = WatchManager() 
  mask = IN_DELETE | IN_CREATE |IN_MODIFY
  notifier = Notifier(wm, EventHandler())
  wm.add_watch(path, mask,auto_add=True,rec=True)
  print 'now starting monitor %s'%(path)
  while True:
   try:
     notifier.process_events()
     if notifier.check_events():
       notifier.read_events()
   except KeyboardInterrupt:
     notifier.stop()
     break
 
if __name__ == "__main__":
 FSMonitor('/home/firefoxbug')
Python 相关文章推荐
Python库urllib与urllib2主要区别分析
Jul 13 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 Python
利用python画一颗心的方法示例
Jan 31 Python
Python之reload流程实例代码解析
Jan 29 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
python基于socket函数实现端口扫描
May 28 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
python如何写个俄罗斯方块
Nov 06 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 Python
Python的pycurl包用法简介
Nov 13 #Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 #Python
Python设置Socket代理及实现远程摄像头控制的例子
Nov 13 #Python
深入解析Python中的urllib2模块
Nov 13 #Python
Python下的常用下载安装工具pip的安装方法
Nov 13 #Python
Python的Flask框架的简介和安装方法
Nov 13 #Python
Python编程入门之Hello World的三种实现方式
Nov 13 #Python
You might like
经验几则 推荐
2006/09/05 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
django反向解析和正向解析的方式
2018/06/05 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
python设置表格边框的具体方法
2020/07/17 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
上海方立数码笔试题
2013/10/18 面试题
会计与审计专业自荐信范文
2014/03/15 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
个人债务授权委托书
2014/10/17 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
2015年个人思想总结
2015/03/09 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
如何优化vue打包文件过大
2022/04/13 Vue.js