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
cd pyinotify/
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
import os
from pyinotify import WatchManager, Notifier, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY
 
class EventHandler(ProcessEvent):
     def process_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)))
     def process_IN_DELETE( self , event):
         print "Delete file:%s." % os.path.join(event.path,event.name)
 
     def process_IN_MODIFY( self , event):
         print "Modify file:%s." % os.path.join(event.path,event.name)
 
def FsMonitor(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
 
     while True :
         try :
             notifier.process_events() #对事件队列中的事件逐个调用事件处理函数
            if notifier.check_events(): #检查是否有新事件到来
                 print "check event true."
                 notifier.read_events() #将新事件读入事件队列
         except KeyboardInterrupt:
             print "keyboard Interrupt."
             notifier.stop() #停止对监视组事件的处理
             break
 
if __name__ = = "__main__" :
     FsMonitor( "/root/work/" )


 

Logo

更多推荐