pyinotify简单实用(用于文件系统监控)

来源:互联网 发布:电影下载网站 知乎 编辑:程序博客网 时间:2024/06/05 11:32

Pyinotify是一个Python模块,用来监测文件系统的变化。 Pyinotify依赖于Linux内核的功能—inotify(内核2.6.13合并)。 inotify的是一个事件驱动的通知器,其通知接口通过三个系统调用从内核空间到用户空间。pyinotify结合这些系统调用,并提供一个顶级的抽象和一个通用的方式来处理这些功能。

pyinotify其实就是通过调用系统的inotify来实现通知的。

 

1. 安装

?
1
2
3
git clone https://github.com/seb-m/pyinotify.git
cdpyinotify/
python setup.py install

2. 简单使用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
importos
frompyinotify importWatchManager, Notifier, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY
 
classEventHandler(ProcessEvent):
    defprocess_IN_CREATE(self, event):
        print"Create file:%s." %os.path.join(event.path,event.name)
 
        os.system('cp -rf %s /tmp/bak/'%(os.path.join(event.path,event.name)))
    defprocess_IN_DELETE(self, event):
        print"Delete file:%s." %os.path.join(event.path,event.name)
 
    defprocess_IN_MODIFY(self, event):
        print"Modify file:%s." %os.path.join(event.path,event.name)
 
defFsMonitor(path='.'):
    wm=WatchManager() #创建监视组
    mask=IN_DELETE | IN_CREATE | IN_MODIFY
    notifier=Notifier(wm, EventHandler()) #创建事件处理器,参数为监视组和对应的事件处理函数
    wm.add_watch(path, mask, auto_add=True, rec=True) #将具体路径的监控加入监视组
    print"now starting monitor %s." %path
 
    whileTrue:
        try:
            notifier.process_events() #对事件队列中的事件逐个调用事件处理函数
            ifnotifier.check_events(): #检查是否有新事件到来
                print"check event true."
                notifier.read_events() #将新事件读入事件队列
        exceptKeyboardInterrupt:
            print"keyboard Interrupt."
            notifier.stop() #停止对监视组事件的处理
            break
 
if__name__ =="__main__":
    FsMonitor("/root/work/")


 

0 0
原创粉丝点击