1. Pyinotify介绍
- 描述:用来监测文件系统的变化,依赖于
Linux
内核的inotify
功能,inotify
是一个事件驱动的通知器,其通知接口从内核空间到用户空间通过三个系统调用。Pyinotify
结合这些系统调用,提供一个顶级的抽象和一个通用的方式来处理这些功能 - 安装:
pip install pyinotify
- 包含子模块:
Notifier
,用来读取通知和处理事件。默认情况下,Notifier处理事件的方式是打印事件。
Notifier类在初始化时接受多个参数,但是只有WatchManager对象是必须传递的参数,WatchManager对象保存了需要监视的文件和目录,以及监视文件和目录的哪些事件,Notifier类根据WatchManager对象中的配置来决定如何处理事件
2. Notifier的内置事件
事件名称 | 事件描述 |
---|---|
IN_ACCESS |
文件访问 |
IN_MODIFY |
文件被写入 |
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_MOVE |
文件被移动,等同于IN_MOVED_FROM |
3. 使用实例
import pyinotify
# 监控多个事件
multi_event = pyinotify.IN_OPEN | pyinotify.IN_CLOSE_NOWRITE
# 创建WatchManager对象
wm = pyinotify.WatchManager()
# 实例化我们定制化后的事件处理类
handler = IN_DELETE_EventHandler()
# 交给Notifier进行处理
notifier = pyinotify.Notifier(wm,handler)
# 添加监控的目录,及事件
wm.add_watch('/tmp',multi_event)
notifier.loop()
# wm.watch_transient_file('/tmp', pyinotify.IN_DELETE,IN_DELETE_EventHandler) # 添加要监控的目录以及监控的事件
# 必须为process_事件名称,event表示事件对象,event.pathname 表示触发事件的文件路径
class IN_DELETE_EventHandler(pyinotify.ProcessEvent):
def process_IN_OPEN(self,event):
print('OPEN',event.pathname)
def process_IN_CLOSE_NOWRITE(self,event):
print('CLOSE_NOWRITE',event.pathname)
标签:文件,实时,pyinotify,文档,Pyinotify,CLOSE,event,Notifier,DELETE
From: https://www.cnblogs.com/zhaohaodong/p/17481027.html