pyinotify用来监控文件系统的变化。依赖于liunx内核inotify功能(2.6.13版本以后的内核才提供),intotify是一个事件驱动的通知器.

命令行直接使用
python -m pyinotify /tmp

pyinotify模块api
Notifier类,最重要的类,读取通知和处理事件,默认处理事件的方式是打印事件。

只有WatchManager对象是必传参数。
WatchManager类 保存了需要监控的文件和目录,以及监视文件和目录的哪些事件。

import pyinotify
wm = pyinotify.WatchManager()
mask=pyinotify.IN_DELETE | pyinotify.IN_CREATE #这里|是与操作合并多个事件z
wm.add_watch("/tmp",mask)

notifier=pyinotify.Notifier(watch_manager=wm)
notifier.loop()


'''
事件标志
分别是 1 2 4 8 16 32 ...512
'''
pyinotify.IN_ACCESS   #被监控项目或者被监控目录中的条目被访问.比如打开的文件被读取
pyinotify.IN_MODIFY   #被监控项目或者被监控目录中的条目被修改.比如打开的文件被修改
pyinotify.IN_ATTRIB     # 监控目录或者监控目录总条目的元数据被修改.比如时间搓或许可被修改
pyinotify.IN_CLOSE_WRITE #一个打开且等待写入的文件或目录被关闭
pyinotify.IN_CLOSE_NOWRITE #一个以只读方式打开的文件或目录被关闭
pyinotify.IN_OPEN     #文件或目录被打开
pyinotify.IN_MOVED_FROM #被监控项目或者被监控目录中的条目被移出监控区域
pyinotify.IN_MOVED_TO #文件或目录被移入监控区域
pyinotify.IN_CREATE      #在被监控目录中创建了子目录或文件
pyinotify.IN_DELETE      #被监控目录中有子目录或文件被删除



'''
定制事件处理方法
方法:继承ProcessEvent类,并实现process_EVENY_NAME
'''
from __future__ import print_function
import pyinotify
wm=pyinotify.WatchManager()
mask=pyinotify.IN_DELETE|pyinotify.IN_CREATE

class EventHandler(pyinotify.ProcessEvent):
    def process_IN_CREATE(self,event):
        print("creating:",event.pathname)
    
    def process_IN_DELETE(self,event):
        print("remove:",event.pathname)
    
handler=EventHandler()

notifier=pyinotify.Notifier(wm,handler) ########################这行和下一行连接所有
wdd=wm.add_watch("/tmp",mask,rec=True)

notifier.loop()

 

发表评论

邮箱地址不会被公开。 必填项已用*标注