当前位置: 首页 > 工具软件 > Pyinotify > 使用案例 >

pyinotify模块速查

伊裕
2023-12-01

环境要求

  • 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_UNMOUNTwhen backing fs was unmounted

参考资料

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

 类似资料: