pyinotify 是什么
pyinotify 是一个简单而有用的 Python 模块,它可用于在 Linux 中实时监控文件系统的更改。
它依赖于 inotify(在内核 2.6.13 中纳入的 Linux 内核功能),它是一个事件驱动的通知程序,其通知通过三个系统调用从内核空间导出到用户空间。
pyinotify 的目的是绑定这三个系统调用,并在其上提供了一个通用和抽象的方法来操作这些功能。
环境要求:
- Linux kernel 2.6.13 或更高。
 - Python 2.4 或更高。
 
:::warning 注意:pyinotify 仅支持 Linux,其他系统可以用 watchdog(watchdog 是跨平台的)。 :::
安装 pyinotify:
$ pip install pyinotify
命令行中使用
监视用户 tecmint 的家目录(/home/tecmint)下的改变:
$ python -m pyinotify -v /home/tecmint
:::info
注意:当在运行 pyinotify 时如果没有指定要监视的目录,**/tmp** 将作为默认目录。
常用参数:
-r:递归监听目录-a:新创建的子目录自动纳入监听 :::
代码中使用
基本使用
监控指定目录的所有事件:
import pyinotifywm = pyinotify.WatchManager()wm.add_watch('/tmp', pyinotify.ALL_EVENTS) # 监控 /tmp 目录所有事件notifier = pyinotify.Notifier(wm)notifier.loop()
监控某几个事件:
import pyinotifywm = pyinotify.WatchManager()wm.add_watch('/tmp', pyinotify.IN_CREATE | pyinotify.IN_DELETE) # 监控 /tmp 目录下创建、删除文件的事件notifier = pyinotify.Notifier(wm)notifier.loop()
wm.add_watch() 的几个常用关键字参数:
rec:设为True相当于在命令行使用时加-r选项。auto_add:设为True相当于在命令行使用时加-a选项。
inotify 提供的事件表
IN_ACCESS # 文件被读取IN_MODIFY # 文件被修改IN_ATTRIB # 元数据被修改IN_CLOSE_WRITE # 打开且等待写入的文件或目录被关闭IN_CLOSE_NOWRITE # 只读方式打开文件或目录被关闭IN_OPEN # 文件或目录被打开IN_MOVED_FROM # 监控的目录中的条目被移出监控区域IN_MOVED_TO # 目录或文件被移入监控区域IN_CREATE # 在被监控目录中创建了子目录或文件IN_DELETE # 被监控目录中有子目录或文件被删除IN_CLOSE # 文件被关闭,等同于IN_CLOSE_WRITEIN_MOVED # 文件被移动,等同于IN_MOVED_FROM
自定义对事件的处理
import pyinotifyclass EventHandler(pyinotify.ProcessEvent):def process_IN_CREATE(self, event): # IN_CREATE 事件的处理程序passdef process_IN_DELETE(self, event): # IN_DELETE 事件的处理程序passwm = pyinotify.WatchManager()wm.add_watch('/tmp', pyinotify.IN_CREATE | pyinotify.IN_DELETE)event_handler = EventHandler()notifier = pyinotify.Notifier(wm, event_handler)notifier.loop()
