官方参考:

https://github.com/seb-m/pyinotify/wiki/Events-types

https://github.com/seb-m/pyinotify/wiki/Install

最近在网上看到python有个pyinotify模块,其中他们可以监控文件夹内的文件的创建,修改,读取,删除等系列操作,我修改了下,添加了可以吧操作记录写到日志里的一点方法,下面就贴出代码了给大家分享下:#!/usr/bin/env python

  1. import os
  2. import datetime
  3. import pyinotify
  4. import logging
  5. class MyEventHandler(pyinotify.ProcessEvent):
  6. logging.basicConfig(level=logging.INFO,filename='/var/log/monitor.log')
  7. #自定义写入那个文件,可以自己修改
  8. logging.info("Starting monitor...")
  9.  
  10. def process_IN_ACCESS(self, event):
  11. print "ACCESS event:", event.pathname
  12. logging.info("ACCESS event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now()))
  13.  
  14. def process_IN_ATTRIB(self, event):
  15. print "ATTRIB event:", event.pathname
  16. logging.info("IN_ATTRIB event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now()))
  17.  
  18. def process_IN_CLOSE_NOWRITE(self, event):
  19. print "CLOSE_NOWRITE event:", event.pathname
  20. logging.info("CLOSE_NOWRITE event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now()))
  21.  
  22. def process_IN_CLOSE_WRITE(self, event):
  23. print "CLOSE_WRITE event:", event.pathname
  24. logging.info("CLOSE_WRITE event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now()))
  25.  
  26. def process_IN_CREATE(self, event):
  27. print "CREATE event:", event.pathname
  28. logging.info("CREATE event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now()))
  29.  
  30. def process_IN_DELETE(self, event):
  31. print "DELETE event:", event.pathname
  32. logging.info("DELETE event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now()))
  33.  
  34. def process_IN_MODIFY(self, event):
  35. print "MODIFY event:", event.pathname
  36. logging.info("MODIFY event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now()))
  37.  
  38. def process_IN_OPEN(self, event):
  39. print "OPEN event:", event.pathname
  40. logging.info("OPEN event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now()))
  41.  
  42. def main():
  43. # watch manager
  44. wm = pyinotify.WatchManager()
  45. wm.add_watch('/tmp', pyinotify.ALL_EVENTS, rec=True)
  46. #/tmp是可以自己修改的监控的目录
  47. # event handler
  48. eh = MyEventHandler()
  49.  
  50. # notifier
  51. notifier = pyinotify.Notifier(wm, eh)
  52. notifier.loop()
  53.  
  54. if __name__ == '__main__':
  55. main()

下面来看看效果如何呢:我在代码定义的是监控tmp目录下的变化:

  1. [root@centos6 monitor-folder]# python total-monitor.py
  2. OPEN event: /tmp/.ICE-unix
  3. CLOSE_NOWRITE event: /tmp/.ICE-unix
  4. OPEN event: /tmp
  5. CLOSE_NOWRITE event: /tmp
  6. OPEN event: /tmp
  7. CLOSE_NOWRITE event: /tmp
  8. DELETE event: /tmp/aa
  9. DELETE event: /tmp/adduser.conf
  10. DELETE event: /tmp/adjtime
  11. DELETE event: /tmp/aliases
  12. DELETE event: /tmp/bash.bashrc
  13. DELETE event: /tmp/bindresvport.blacklist
  14. DELETE event: /tmp/environment
  15. DELETE event: /tmp/fstab
  16. DELETE event: /tmp/ipt.err
  17. DELETE event: /tmp/ipt.out
  18. DELETE event: /tmp/krb5.conf
  19. DELETE event: /tmp/odbc.ini
  20. DELETE event: /tmp/odbcinst.ini
  21. DELETE event: /tmp/timezone
  22. DELETE event: /tmp/ucf.conf
  23. DELETE event: /tmp/warnquota.conf
  24. DELETE event: /tmp/wgetrc
  25. DELETE event: /tmp/xinetd.conf
  26. CREATE event: /tmp/aa
  27. OPEN event: /tmp/aa
  28. ATTRIB event: /tmp/aa
  29. CLOSE_WRITE event: /tmp/aa
  30. CREATE event: /tmp/bb
  31. OPEN event: /tmp/bb
  32. ATTRIB event: /tmp/bb
  33. CLOSE_WRITE event: /tmp/bb
  34. CREATE event: /tmp/cc
  35. OPEN event: /tmp/cc
  36. ATTRIB event: /tmp/cc
  37. CLOSE_WRITE event: /tmp/cc
  38.  
  39. 上面是打印出来的监控状态,下面是我的操作代码:
  40.  
  41. [root@centos6 tmp]# ls
  42. aa bash.bashrc ipt.err odbcinst.ini wgetrc
  43. adduser.conf bindresvport.blacklist ipt.out timezone xinetd.conf
  44. adjtime environment krb5.conf ucf.conf
  45. aliases fstab odbc.ini warnquota.conf
  46. [root@centos6 tmp]# rm -rf *
  47. [root@centos6 tmp]# touch aa
  48. [root@centos6 tmp]# touch bb
  49. [root@centos6 tmp]# touch cc
  50. [root@centos6 tmp]#

上面是直接打印出来的,下面在看看我吧操作记录在日志文件里面,也可以看下日志文件的记录:

  1. INFO:root:Starting monitor...
  2. INFO:root:OPEN event : /tmp/.ICE-unix 2011-10-27 13:31:57.219168
  3. INFO:root:CLOSE_NOWRITE event : /tmp/.ICE-unix 2011-10-27 13:31:57.219609
  4. INFO:root:OPEN event : /tmp/ 2011-10-27 13:32:21.395228
  5. INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 13:32:21.398105
  6. INFO:root:OPEN event : /tmp/ 2011-10-27 13:32:25.108997
  7. INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 13:32:25.110239
  8. INFO:root:CREATE event : /tmp/aa 2011-10-27 13:32:28.004863
  9. INFO:root:OPEN event : /tmp/aa 2011-10-27 13:32:28.005860
  10. INFO:root:IN_ATTRIB event : /tmp/aa 2011-10-27 13:32:28.006723
  11. INFO:root:CLOSE_WRITE event : /tmp/aa 2011-10-27 13:32:28.014617
  12. INFO:root:CREATE event : /tmp/bb 2011-10-27 13:32:30.149758
  13. INFO:root:OPEN event : /tmp/bb 2011-10-27 13:32:30.164415
  14. INFO:root:IN_ATTRIB event : /tmp/bb 2011-10-27 13:32:30.164877
  15. INFO:root:CLOSE_WRITE event : /tmp/bb 2011-10-27 13:32:30.165303
  16. INFO:root:CREATE event : /tmp/cc 2011-10-27 13:32:32.725418
  17. INFO:root:OPEN event : /tmp/cc 2011-10-27 13:32:32.726367
  18. INFO:root:IN_ATTRIB event : /tmp/cc 2011-10-27 13:32:32.727229
  19. INFO:root:CLOSE_WRITE event : /tmp/cc 2011-10-27 13:32:32.735052
  20. INFO:root:CREATE event : /tmp/dd 2011-10-27 13:32:39.771041
  21. INFO:root:OPEN event : /tmp/dd 2011-10-27 13:32:39.780881
  22. INFO:root:IN_ATTRIB event : /tmp/dd 2011-10-27 13:32:39.781455
  23. INFO:root:CLOSE_WRITE event : /tmp/dd 2011-10-27 13:32:39.781893
  24. INFO:root:Starting monitor...
  25. INFO:root:OPEN event : /tmp/.ICE-unix 2011-10-27 14:01:43.742477
  26. INFO:root:CLOSE_NOWRITE event : /tmp/.ICE-unix 2011-10-27 14:01:43.742915
  27. INFO:root:OPEN event : /tmp/ 2011-10-27 14:01:50.579778
  28. INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 14:01:50.581317
  29. INFO:root:DELETE event : /tmp/aa 2011-10-27 14:01:54.999528
  30. INFO:root:DELETE event : /tmp/bb 2011-10-27 14:01:58.995966
  31. INFO:root:DELETE event : /tmp/cc 2011-10-27 14:02:02.795950
  32. INFO:root:DELETE event : /tmp/dd 2011-10-27 14:02:06.284208
  33. INFO:root:OPEN event : /tmp/ 2011-10-27 14:02:07.738560
  34. INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 14:02:07.741922
  35. INFO:root:CREATE event : /tmp/aa 2011-10-27 14:02:11.110322
  36. INFO:root:OPEN event : /tmp/aa 2011-10-27 14:02:11.113150
  37. INFO:root:IN_ATTRIB event : /tmp/aa 2011-10-27 14:02:11.116381
  38. INFO:root:CLOSE_WRITE event : /tmp/aa 2011-10-27 14:02:11.118382
  39. INFO:root:Starting monitor...
  40. INFO:root:OPEN event : /tmp/.ICE-unix 2011-10-27 21:39:12.520432
  41. INFO:root:CLOSE_NOWRITE event : /tmp/.ICE-unix 2011-10-27 21:39:12.520879
  42. INFO:root:OPEN event : /tmp/ 2011-10-27 21:39:23.784759
  43. INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 21:39:23.793211
  44. INFO:root:OPEN event : /tmp/ 2011-10-27 21:39:33.916232
  45. INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 21:39:33.916823
  46. INFO:root:DELETE event : /tmp/aa 2011-10-27 21:39:33.939008
  47. INFO:root:DELETE event : /tmp/adduser.conf 2011-10-27 21:39:33.958143
  48. INFO:root:DELETE event : /tmp/adjtime 2011-10-27 21:39:33.962497
  49. INFO:root:DELETE event : /tmp/aliases 2011-10-27 21:39:33.978506
  50. INFO:root:DELETE event : /tmp/bash.bashrc 2011-10-27 21:39:33.980834
  51. INFO:root:DELETE event : /tmp/bindresvport.blacklist 2011-10-27 21:39:33.997176
  52. INFO:root:DELETE event : /tmp/environment 2011-10-27 21:39:33.997683
  53. INFO:root:DELETE event : /tmp/fstab 2011-10-27 21:39:33.998110
  54. INFO:root:DELETE event : /tmp/ipt.err 2011-10-27 21:39:33.998532
  55. INFO:root:DELETE event : /tmp/ipt.out 2011-10-27 21:39:34.000360
  56. INFO:root:DELETE event : /tmp/krb5.conf 2011-10-27 21:39:34.000816
  57. INFO:root:DELETE event : /tmp/odbc.ini 2011-10-27 21:39:34.002217
  58. INFO:root:DELETE event : /tmp/odbcinst.ini 2011-10-27 21:39:34.002675
  59. INFO:root:DELETE event : /tmp/timezone 2011-10-27 21:39:34.003110
  60. INFO:root:DELETE event : /tmp/ucf.conf 2011-10-27 21:39:34.003538
  61. INFO:root:DELETE event : /tmp/warnquota.conf 2011-10-27 21:39:34.018152
  62. INFO:root:DELETE event : /tmp/wgetrc 2011-10-27 21:39:34.018641
  63. INFO:root:DELETE event : /tmp/xinetd.conf 2011-10-27 21:39:34.041880
  64. INFO:root:CREATE event : /tmp/aa 2011-10-27 21:39:40.639965
  65. INFO:root:OPEN event : /tmp/aa 2011-10-27 21:39:40.640914
  66. INFO:root:IN_ATTRIB event : /tmp/aa 2011-10-27 21:39:40.647835
  67. INFO:root:CLOSE_WRITE event : /tmp/aa 2011-10-27 21:39:40.652158
  68. INFO:root:CREATE event : /tmp/bb 2011-10-27 21:39:43.064526
  69. INFO:root:OPEN event : /tmp/bb 2011-10-27 21:39:43.070849
  70. INFO:root:IN_ATTRIB event : /tmp/bb 2011-10-27 21:39:43.071329
  71. INFO:root:CLOSE_WRITE event : /tmp/bb 2011-10-27 21:39:43.071762
  72. INFO:root:CREATE event : /tmp/cc 2011-10-27 21:39:47.046752
  73. INFO:root:OPEN event : /tmp/cc 2011-10-27 21:39:47.051537
  74. INFO:root:IN_ATTRIB event : /tmp/cc 2011-10-27 21:39:47.056211
  75. INFO:root:CLOSE_WRITE event : /tmp/cc 2011-10-27 21:39:47.057490
  76. [root@centos6 tmp]#
  77.  
  78. http://www.pyshell.com/index.php/archives/477

Python 的 pyinotify 模块 监控文件夹和文件的变动的更多相关文章

  1. python批量处理文件夹中文件的问题

    用os模块读取文件夹中文件 原来的代码: import osfrom scipy.misc import imread filenames=os.listdir(r'./unprocess')for ...

  2. Python 文件夹及文件操作

    import os import os.path from shutil import copy def copyfile(src, dst): count = 1 for filename in o ...

  3. Python学习(九)IO 编程 —— 文件夹及文件操作

    Python 文件夹及文件操作 我们经常会与文件和目录打交道,对于这些操作,python可以使用 os 及 shutill 模块,其中包含了很多操作文件和目录的函数. os 可以执行简单的文件夹及文件 ...

  4. python文件夹遍历,文件操作,获取文件修改创建时间

    在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回当前 ...

  5. python调用另一个文件中的代码,pycharm环境下:同文件夹下文件(.py)之间的调用,出现红线问题

    如何调用另一个python文件中的代码无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了“hello world”),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等, ...

  6. 使用FileSystemWatcher监控文件夹及文件

    引言 这一周主要精力集中学习一个同事开发的本地文件搜索项目上,其中客户端添加共享文件时主要是使用FileSystemWatcher 监控文件,并在各种事件发生时向服务器发送消息. 解决方法 FileS ...

  7. python 实现彻底删除文件夹和文件夹下的文件

    python 中有很多内置库可以帮忙用来删除文件夹和文件,当面对要删除多个非空文件夹,并且目录层次大于3层以上时,仅使用一种内置方法是无法达到彻底删除文件夹和文件的效果的,比较low的方式是多次调用直 ...

  8. 有关文件夹与文件的查找,删除等功能 在 os 模块中实现

    最近在写的程序频繁地与文件操作打交道,这块比较弱,还好在百度上找到一篇不错的文章,这是原文传送门,我对原文稍做了些改动. 有关文件夹与文件的查找,删除等功能 在 os 模块中实现.使用时需先导入这个模 ...

  9. Python模糊查询本地文件夹去除文件后缀(7行代码)

    Python模糊查询本地文件夹去除文件后缀 import os,re def fuzzy_search(path): word= input('请输入要查询的内容:') for filename in ...

随机推荐

  1. HDU1760 A New Tetris Game NP态

    A New Tetris Game Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. hive的使用03

    1.hive中的四种排序 1.1 order by :对全局进行排序,只能有一个reduce select * from hive.employee order by id;

  3. 浏览器请求URL原理

    访问服务器url其实是访问DNS服务器,浏览器询问DNS服务器锁访问的url的IP是什么, 找到之后就会返回结果,找不到就继续去其他DNS中寻找,找到路径之后就会返回一个html文档,浏览器会解析这个 ...

  4. 【leetcode❤python】 155. Min Stack

    #-*- coding: UTF-8 -*- class MinStack(object):    def __init__(self):        """      ...

  5. AS 重装系统之后配置

    重新安装了win7 系统,一起的AS 放在其他盘里 1.重新安装java sdk 配置java 环境. 2,从新配置AS 工作界面及各种配置 3,重新安装genymotion 并在as 中配置 出现 ...

  6. Android Button上的文字自动变成大写,如何解决呢?

    android:textAllCaps="false"手动添加这一行,就不会有烦恼了.

  7. [SAP ABAP开发技术总结]选择屏幕——各种屏幕元素演示

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. angularjs指令系统系列课程(3):替换replace,内容保留transclude,作用方式restrict

    这一节我们主要看一下replace,transclude,restrict这三个参数 1.replace 可取值:bool 默认为:true 对于replace属性,设置为false表示原有指令标识不 ...

  9. 跨站请求伪造 CSRF / XSRF<二:应用>

    防御的方法主要有两种<java示例> 1.检查Referer字段 HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址.在处理敏感数据请求时,通常来说,Referer字 ...

  10. js之事件冒泡和事件捕获

    (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div ...