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 pyinotify
wm = pyinotify.WatchManager()
wm.add_watch('/tmp', pyinotify.ALL_EVENTS) # 监控 /tmp 目录所有事件
notifier = pyinotify.Notifier(wm)
notifier.loop()
监控某几个事件:
import pyinotify
wm = 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_WRITE
IN_MOVED # 文件被移动,等同于IN_MOVED_FROM
自定义对事件的处理
import pyinotify
class EventHandler(pyinotify.ProcessEvent):
def process_IN_CREATE(self, event): # IN_CREATE 事件的处理程序
pass
def process_IN_DELETE(self, event): # IN_DELETE 事件的处理程序
pass
wm = pyinotify.WatchManager()
wm.add_watch('/tmp', pyinotify.IN_CREATE | pyinotify.IN_DELETE)
event_handler = EventHandler()
notifier = pyinotify.Notifier(wm, event_handler)
notifier.loop()