官方参考:

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

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

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

import os
import datetime
import pyinotify
import logging
class MyEventHandler(pyinotify.ProcessEvent):
logging.basicConfig(level=logging.INFO,filename='/var/log/monitor.log')
#自定义写入那个文件,可以自己修改
logging.info("Starting monitor...") def process_IN_ACCESS(self, event):
print "ACCESS event:", event.pathname
logging.info("ACCESS event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now())) def process_IN_ATTRIB(self, event):
print "ATTRIB event:", event.pathname
logging.info("IN_ATTRIB event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now())) def process_IN_CLOSE_NOWRITE(self, event):
print "CLOSE_NOWRITE event:", event.pathname
logging.info("CLOSE_NOWRITE event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now())) def process_IN_CLOSE_WRITE(self, event):
print "CLOSE_WRITE event:", event.pathname
logging.info("CLOSE_WRITE event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now())) def process_IN_CREATE(self, event):
print "CREATE event:", event.pathname
logging.info("CREATE event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now())) def process_IN_DELETE(self, event):
print "DELETE event:", event.pathname
logging.info("DELETE event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now())) def process_IN_MODIFY(self, event):
print "MODIFY event:", event.pathname
logging.info("MODIFY event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now())) def process_IN_OPEN(self, event):
print "OPEN event:", event.pathname
logging.info("OPEN event : %s %s" % (os.path.join(event.path,event.name),datetime.datetime.now())) def main():
# watch manager
wm = pyinotify.WatchManager()
wm.add_watch('/tmp', pyinotify.ALL_EVENTS, rec=True)
#/tmp是可以自己修改的监控的目录
# event handler
eh = MyEventHandler() # notifier
notifier = pyinotify.Notifier(wm, eh)
notifier.loop() if __name__ == '__main__':
main()

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

[root@centos6 monitor-folder]# python total-monitor.py
OPEN event: /tmp/.ICE-unix
CLOSE_NOWRITE event: /tmp/.ICE-unix
OPEN event: /tmp
CLOSE_NOWRITE event: /tmp
OPEN event: /tmp
CLOSE_NOWRITE event: /tmp
DELETE event: /tmp/aa
DELETE event: /tmp/adduser.conf
DELETE event: /tmp/adjtime
DELETE event: /tmp/aliases
DELETE event: /tmp/bash.bashrc
DELETE event: /tmp/bindresvport.blacklist
DELETE event: /tmp/environment
DELETE event: /tmp/fstab
DELETE event: /tmp/ipt.err
DELETE event: /tmp/ipt.out
DELETE event: /tmp/krb5.conf
DELETE event: /tmp/odbc.ini
DELETE event: /tmp/odbcinst.ini
DELETE event: /tmp/timezone
DELETE event: /tmp/ucf.conf
DELETE event: /tmp/warnquota.conf
DELETE event: /tmp/wgetrc
DELETE event: /tmp/xinetd.conf
CREATE event: /tmp/aa
OPEN event: /tmp/aa
ATTRIB event: /tmp/aa
CLOSE_WRITE event: /tmp/aa
CREATE event: /tmp/bb
OPEN event: /tmp/bb
ATTRIB event: /tmp/bb
CLOSE_WRITE event: /tmp/bb
CREATE event: /tmp/cc
OPEN event: /tmp/cc
ATTRIB event: /tmp/cc
CLOSE_WRITE event: /tmp/cc 上面是打印出来的监控状态,下面是我的操作代码: [root@centos6 tmp]# ls
aa bash.bashrc ipt.err odbcinst.ini wgetrc
adduser.conf bindresvport.blacklist ipt.out timezone xinetd.conf
adjtime environment krb5.conf ucf.conf
aliases fstab odbc.ini warnquota.conf
[root@centos6 tmp]# rm -rf *
[root@centos6 tmp]# touch aa
[root@centos6 tmp]# touch bb
[root@centos6 tmp]# touch cc
[root@centos6 tmp]#

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

INFO:root:Starting monitor...
INFO:root:OPEN event : /tmp/.ICE-unix 2011-10-27 13:31:57.219168
INFO:root:CLOSE_NOWRITE event : /tmp/.ICE-unix 2011-10-27 13:31:57.219609
INFO:root:OPEN event : /tmp/ 2011-10-27 13:32:21.395228
INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 13:32:21.398105
INFO:root:OPEN event : /tmp/ 2011-10-27 13:32:25.108997
INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 13:32:25.110239
INFO:root:CREATE event : /tmp/aa 2011-10-27 13:32:28.004863
INFO:root:OPEN event : /tmp/aa 2011-10-27 13:32:28.005860
INFO:root:IN_ATTRIB event : /tmp/aa 2011-10-27 13:32:28.006723
INFO:root:CLOSE_WRITE event : /tmp/aa 2011-10-27 13:32:28.014617
INFO:root:CREATE event : /tmp/bb 2011-10-27 13:32:30.149758
INFO:root:OPEN event : /tmp/bb 2011-10-27 13:32:30.164415
INFO:root:IN_ATTRIB event : /tmp/bb 2011-10-27 13:32:30.164877
INFO:root:CLOSE_WRITE event : /tmp/bb 2011-10-27 13:32:30.165303
INFO:root:CREATE event : /tmp/cc 2011-10-27 13:32:32.725418
INFO:root:OPEN event : /tmp/cc 2011-10-27 13:32:32.726367
INFO:root:IN_ATTRIB event : /tmp/cc 2011-10-27 13:32:32.727229
INFO:root:CLOSE_WRITE event : /tmp/cc 2011-10-27 13:32:32.735052
INFO:root:CREATE event : /tmp/dd 2011-10-27 13:32:39.771041
INFO:root:OPEN event : /tmp/dd 2011-10-27 13:32:39.780881
INFO:root:IN_ATTRIB event : /tmp/dd 2011-10-27 13:32:39.781455
INFO:root:CLOSE_WRITE event : /tmp/dd 2011-10-27 13:32:39.781893
INFO:root:Starting monitor...
INFO:root:OPEN event : /tmp/.ICE-unix 2011-10-27 14:01:43.742477
INFO:root:CLOSE_NOWRITE event : /tmp/.ICE-unix 2011-10-27 14:01:43.742915
INFO:root:OPEN event : /tmp/ 2011-10-27 14:01:50.579778
INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 14:01:50.581317
INFO:root:DELETE event : /tmp/aa 2011-10-27 14:01:54.999528
INFO:root:DELETE event : /tmp/bb 2011-10-27 14:01:58.995966
INFO:root:DELETE event : /tmp/cc 2011-10-27 14:02:02.795950
INFO:root:DELETE event : /tmp/dd 2011-10-27 14:02:06.284208
INFO:root:OPEN event : /tmp/ 2011-10-27 14:02:07.738560
INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 14:02:07.741922
INFO:root:CREATE event : /tmp/aa 2011-10-27 14:02:11.110322
INFO:root:OPEN event : /tmp/aa 2011-10-27 14:02:11.113150
INFO:root:IN_ATTRIB event : /tmp/aa 2011-10-27 14:02:11.116381
INFO:root:CLOSE_WRITE event : /tmp/aa 2011-10-27 14:02:11.118382
INFO:root:Starting monitor...
INFO:root:OPEN event : /tmp/.ICE-unix 2011-10-27 21:39:12.520432
INFO:root:CLOSE_NOWRITE event : /tmp/.ICE-unix 2011-10-27 21:39:12.520879
INFO:root:OPEN event : /tmp/ 2011-10-27 21:39:23.784759
INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 21:39:23.793211
INFO:root:OPEN event : /tmp/ 2011-10-27 21:39:33.916232
INFO:root:CLOSE_NOWRITE event : /tmp/ 2011-10-27 21:39:33.916823
INFO:root:DELETE event : /tmp/aa 2011-10-27 21:39:33.939008
INFO:root:DELETE event : /tmp/adduser.conf 2011-10-27 21:39:33.958143
INFO:root:DELETE event : /tmp/adjtime 2011-10-27 21:39:33.962497
INFO:root:DELETE event : /tmp/aliases 2011-10-27 21:39:33.978506
INFO:root:DELETE event : /tmp/bash.bashrc 2011-10-27 21:39:33.980834
INFO:root:DELETE event : /tmp/bindresvport.blacklist 2011-10-27 21:39:33.997176
INFO:root:DELETE event : /tmp/environment 2011-10-27 21:39:33.997683
INFO:root:DELETE event : /tmp/fstab 2011-10-27 21:39:33.998110
INFO:root:DELETE event : /tmp/ipt.err 2011-10-27 21:39:33.998532
INFO:root:DELETE event : /tmp/ipt.out 2011-10-27 21:39:34.000360
INFO:root:DELETE event : /tmp/krb5.conf 2011-10-27 21:39:34.000816
INFO:root:DELETE event : /tmp/odbc.ini 2011-10-27 21:39:34.002217
INFO:root:DELETE event : /tmp/odbcinst.ini 2011-10-27 21:39:34.002675
INFO:root:DELETE event : /tmp/timezone 2011-10-27 21:39:34.003110
INFO:root:DELETE event : /tmp/ucf.conf 2011-10-27 21:39:34.003538
INFO:root:DELETE event : /tmp/warnquota.conf 2011-10-27 21:39:34.018152
INFO:root:DELETE event : /tmp/wgetrc 2011-10-27 21:39:34.018641
INFO:root:DELETE event : /tmp/xinetd.conf 2011-10-27 21:39:34.041880
INFO:root:CREATE event : /tmp/aa 2011-10-27 21:39:40.639965
INFO:root:OPEN event : /tmp/aa 2011-10-27 21:39:40.640914
INFO:root:IN_ATTRIB event : /tmp/aa 2011-10-27 21:39:40.647835
INFO:root:CLOSE_WRITE event : /tmp/aa 2011-10-27 21:39:40.652158
INFO:root:CREATE event : /tmp/bb 2011-10-27 21:39:43.064526
INFO:root:OPEN event : /tmp/bb 2011-10-27 21:39:43.070849
INFO:root:IN_ATTRIB event : /tmp/bb 2011-10-27 21:39:43.071329
INFO:root:CLOSE_WRITE event : /tmp/bb 2011-10-27 21:39:43.071762
INFO:root:CREATE event : /tmp/cc 2011-10-27 21:39:47.046752
INFO:root:OPEN event : /tmp/cc 2011-10-27 21:39:47.051537
INFO:root:IN_ATTRIB event : /tmp/cc 2011-10-27 21:39:47.056211
INFO:root:CLOSE_WRITE event : /tmp/cc 2011-10-27 21:39:47.057490
[root@centos6 tmp]# 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. 一看便知spring+quartz定时任务

    这是我经过网上收集然后加上自己的测试写的,以便大家使用 标配:已测 注意需要的包:(在已经配置spring 的情况下) quartz-all-1.6.jar        spring-context ...

  2. 扩展progress_timer的计时精度

    progress对外输出精度只有小数点后两位(这点可以运行上节程序进行验证),即精确到0.01秒. 我们使用模板技术仿造一个progress_timer编写一个新类:new_progress_time ...

  3. Xcode6 ADD Copy Files Build Phase 是灰色的

    在学习的怎样写frameWork的时候,查看一个教程How to Create a Framework for iOS  [一个中文翻译 创建自己的framework] 其中一个步骤就是添加一个Cop ...

  4. 剑指offer七:两个链表的第一个公共结点

    输入两个链表,找出它们的第一个公共结点. import java.util.*; public class Solution { public ListNode FindFirstCommonNode ...

  5. 《简明python教程》笔记一

    读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info  安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...

  6. python走起之第十七话

    选择器 #id 概述 根据给定的ID匹配一个元素. 使用任何的元字符(如 !"#$%&'()*+,./:;<=>?@[\]^`{|}~)作为名称的文本部分, 它必须被两个 ...

  7. CentOS 6.3 安装过程

    1.放入光盘 2.安装欢迎界面 进入安装欢迎界面,有四个选项: 1.“Install or upgrade an existing system”:安装或升级现有系统 2. “Install syst ...

  8. Linux 的文本处理命令一览

    grep 基于关键字搜索文本内容 -i 搜索时忽略大小写-n 显示结果所在行数-v 输出不带关键字的行-Ax 在输出的时候包含结果所在行之后的指定行数(x为一个数值,表示输出后面x行)-Bx 在输出的 ...

  9. 真核转录组(denovo/resequencing)及案例分析

    参考: 转录组文章的常规套路 文章解读:<Science>小麦转录组研究文章 转录组数据饱和度评估方法 Paper这个东西是多么的诱人,可以毕业,可以评职称,可以拿绩效. 现在的文章都是有 ...

  10. MyBatis缓存禁用失败

    问题:MyBatis缓存无法禁用,同一个session的select查询结果一样,但是数据库其实已改变. 尝试达到想要的目的: 1.msgmapper.xml里的select标签加上 <sele ...