python pyinotify模块监视目录变更

发布时间:2020-01-17编辑:脚本学堂
python pyinotify模块的例子,在python众多模块中pyinotify是用于监视目录变更的类库,可以实时监测文件变化及文件夹内容或属性变化。

1,首先,安装pyinotify模块

下载地址 https://github.com/seb-m/pyinotify

传到linux下,运行命令:
 

$ cd pyinotify-x-x-x && python setup.py install

vi monitorFile.py 或下载代码包monitorFile

代码:
 

复制代码 代码示例:

#coding = utf-8
import os
import pyinotify

class OnWriteHandler(pyinotify.ProcessEvent):
 def process_IN_CREATE(self, event): #函数名以"process_"开头,后面跟注册的监测类型
  os.system('echo '+'create file:%s'%(os.path.join(event.path,event.name))) #之后用于nohup输出
  print "create file: %s " % os.path.join(event.path,event.name) #打印

def auto_compile(path='.'):
 wm = pyinotify.WatchManager()
 mask = pyinotify.IN_CREATE #监测类型,如果多种用|分开,pyinotify.IN_CREATE | pyinotify.IN_DELETE
 notifier = pyinotify.Notifier(wm, OnWriteHandler())
 wm.add_watch(path, mask,rec=True,auto_add=True)
 print '==> Start monitoring %s (type c^c to exit)' % path
 while True:
  try:
   notifier.process_events()
   if notifier.check_events():
   notifier.read_events()
  except KeyboardInterrupt:
   notifier.stop()
   break

if __name__ == "__main__":
 auto_compile()
 

 
监测类型:
 

'IN_ACCESS' : 0x00000001, # File was accessed
'IN_MODIFY' : 0x00000002, # File was modified
'IN_ATTRIB' : 0x00000004, # Metadata changed
'IN_CLOSE_WRITE' : 0x00000008, # Writable file was closed
'IN_CLOSE_NOWRITE' : 0x00000010, # Unwritable file closed
'IN_OPEN' : 0x00000020, # File was opened
'IN_MOVED_FROM' : 0x00000040, # File was moved from X
'IN_MOVED_TO' : 0x00000080, # File was moved to Y
'IN_CREATE' : 0x00000100, # Subfile was created
'IN_DELETE' : 0x00000200, # Subfile was deleted
'IN_DELETE_SELF' : 0x00000400, # Self (watched item itself)
# was deleted
'IN_MOVE_SELF' : 0x00000800, # Self (watched item itself) was moved

测试,在指定目录下运行:
python pyinotify模块监视目录变更

python monitorFile.py
这时创建文件将会被调用。

当然,不能一直开着Terminal,需要执行以下命令,完成后台监测:
 

nohup python2.5 monitorFile.py > MF.log 2>&1 &
 

注意python的版本号,可以直接写python为默认的

如此,更完成后台检测了。

关闭后台运行的进程的方法:
 

ps aux | grep python
kill -9 pid