天天看点

pyinotify模块速查环境要求pyinotify参考资料

环境要求

  • Linux >= 2.6.13
  • Python ≥ 2.4 (including Python 3.x)

pyinotify

检测文件系统的变化,依赖于Linux内核的inotify功能。

1.安装

pip install pyinotify
           

2.简单使用

import pyinotify

monitorObj = pyinotify.WatchManager()
monitorObj.add_watch(path,pyinotify.ALL_EVENTS, rec=True, auto_add=True) # 添加需要监控的路径和监控的事件
handler = EventHandler() # 事件处理类
notifier = pyinotify.Notifier(monitorObj, handler) # notifier处理 
notifier.loop() # 循环处理事件
           

3.事件处理

在简单使用中的EventHandler类需要我们进行定制,实现对事件的特殊处理方法

import pyinotify
 
multi_event = pyinotify.IN_OPEN | pyinotify.IN_CLOSE_NOWRITE    
monitorObj = pyinotify.WatchManager()   

class MyEventHandler(pyinotify.ProcessEvent):                   
    def process_IN_OPEN(self,event):                            
        print('OPEN',event.pathname)                            
    def process_IN_CLOSE_NOWRITE(self,event):
        print('CLOSE_NOWRITE',event.pathname)
 
handler = MyEventHandler()                                      
notifier = pyinotify.Notifier(monitorObj ,handler)                       
monitorObj.add_watch(path,multi_event)                                
notifier.loop()
           

4.事件标志

以下事件发生的前提都是相关文件处于被监控目录下

事件标志 含义 其他
IN_ACCESS 文件被访问
IN_ATTRIB 文件的一个元数据发生变化 包括权限改变,时间戳,扩展属性被修改,链接数变化,所属用户/用户组变化等等
IN_CLOSE_NOWRITE 一个不可写文件被关闭
IN_CLOSE_WRITE 一个可写文件被关闭
IN_CREATE 一个文件或目录被创建
IN_DELETE 一个文件或目录被删除
IN_DELETE_SELF 被监视的对象本身被删除
IN_DONT_FOLLOW 如果是符号链接,则不取消引用路径
IN_IGNORED 当watch被移除时发生 用户一般用不到,可用IN_DELETE* 代替
IN_ISDIR 和目录引发的事件有关
IN_MASK_ADD 更新mask值并不覆盖原值
IN_MODIFY 一个文件被修改
IN_MOVE_SELF 被监控的对象本身被移动了
IN_MOVED_FROM 被监控路径中的一个文件/目录从另一个被监控的路径移动而来
IN_MOVED_TO 被监控路径中的一个文件/目录移动到另一个被监控的路径
IN_ONLYDIR 只监控路径如果它只是个目录
IN_OPEN 一个文件被打开
IN_Q_OVERFLOW 事件队列溢出
IN_UNMOUNT when backing fs was unmounted

参考资料

https://github.com/seb-m/pyinotify/wik