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

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

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

1. 安装

git clone https://github.com/seb-m/pyinotify.git
cd pyinotify/
python setup.py install

2. 简单使用

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/")
时间: 2024-10-29 00:24:37

pyinotify简单实用(用于文件系统监控)的相关文章

管理系统中的简单分区和文件系统

管理系统中的简单分区和文件系统 一.简单分区和文件系统 存储是每个计算机系统的基本需求. Red Hat Enterprise Linux 提供了一些强大的工具 , 它们能在大量的场景中管理多种类型的存储设备 disk 是用于管理磁盘分区的实用程序.您可以通过选择 -l选项和指定磁盘名称 ( fdisk -cul /dev/vda ) 运行该实用程序 , 以查看磁盘及其分区.您可以通过交互式地运行该实用 程序 , 并选择相应的菜单选项 ( fdisk -cu /dev/vda ) 进行更改. -

##II 第四单元##管理系统中的简单分区和文件系统

简单分区和文件系统 存储是每个计算机系统的基本需求. Red Hat EnterpriseLinux 提供了一些强大的工具 , 它们能在大量的场景中管理多种类型的存储设备 disk 是用于管理磁盘分区的实用程序.您可以通过选择 -l选项和指定磁盘名称 ( fdisk-cul /dev/vda ) 运行该实用程序 , 以查看磁盘及其分区.您可以通过交互式地运行该实用程序 , 并选择相应的菜单选项 (fdisk -cu /dev/vda ) 进行更改. -c 禁用旧的 DOS 兼容模式 ,-u 以扇

inotify 工具 是一种强大的、细粒度的、异步文件系统监控机制

前言:Inotify是一种强大的.细粒度的.异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性.读写属性.权限属性.删除创建.移动等操作,也就是可以监控文件发生的一切变化. inotify-tools是一个C库和一组命令行的工作提供Linux下inotify的简单接口.inotify-tools安装后会得到inotifywait和inotifywatch这两条命令 inotifywait命令可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装i

构建最简单的根文件系统

       本文将介绍如何构建一个最简单的根文件系统,并且初步分析内核如何执行第一个内核程序.     挂接根文件系统       在挂接根文件系统之前,需要制作根文件系统.根文件系统里面需要一些基本的命令,目录和设备文件,下面来介绍如何使用busybox来制作根文件系统.       我们都知道,init进程是系统启动后执行的第一个应用程序,根据一般的Linux应用程序配置结构,一个可执行文件通常搭配一个对于的配置文件,例如samba功能对于/etc/samba/smb.conf配置文件,n

简单实用的CSS网页布局中文排版技巧

由于汉字的特殊性,在css网页布局中,中文排版有别于英文排版.排版是一个麻烦的问题,小编认为,作为一个优秀的网页设计师和网页制作人员,掌握一些简单的中文排版技巧是不可或缺的,所以今天特意总结了几个简单实用的技巧,希望对大家有所帮助. 一.如何设定文字字体.颜色.大小等 font-style设定斜体,比如font-style:italic font-weight设定文字粗细,比如font-weight:bold font-size设定文字大小,比如font-size:12px line-heigh

【Android进阶】Junit单元测试环境搭建以及简单实用

单元测试的目的 首先,Junit单元测试要实现的功能,就是用来测试写好的方法是否能够正确的执行,一般多用于对业务方法的测试. 单元测试的环境配置 1.在AndroidManifest清单文件的Application节点下,引入单元测试使用的库 2.在AndroidManifest清单文件与Application节点平行的节点中,添加instrumentation节点 下面是一个完整的配置的代码 <manifest xmlns:android="http://schemas.android.

11--瓦片地图(一)简单实用

Cocos2DX引擎实用CCTMXTileMap类来表示瓦片地图(也就砖块地图),主要包含如下四类元素: 砖块元素:tmx文件中指定的纹理图片(理解不一定正确): 砖块拼接的图层(CCTMXLayer):这就是我们看到的背景地图,引擎以精灵CCSprite来组织砖块元素,其中包含砖块大小等诸多信息: 物体图层(CCTMXObjectGroup):可能用于组织建筑物等等 自身属性:主要是地图大小等属性. 首先需要使用Tield瓦片地图编辑器创建一个tmx格式的文件(使用教程),名称为"TileMa

简单实用的鼠标滑过图片遮罩层动画jQuery插件

nsHover是一款简单实用的鼠标滑过图片遮罩层动画jQuery插件.该插件可以在图片或块级元素上制作鼠标滑过时的遮罩层动画效果,它可以设置遮罩层的前景色和背景色,可以制作圆形图片等,非常实用. 在线预览   源码下载 使用方法 使用该鼠标滑过插件需要引入jQuery和ns.hover.min.js文件. 1 2 <script src="js/jquery.min.js"></script> <script src="js/ns.hover.m

滚动数组的简单实用

二维动规是如果只用到本层的和上一层的数据就可以用滚动数组 比如 dp[i,j]=max(dp[i-1,j],dp[i,j-1]); max的意思就不多说了... 具体例子的话,比较经典的就是最长公共子序列,就是 abcde 和 aecd的最长公共子序列就是acd. 如果不是滚动数组的话就是 for i:=1 to length(st1) do for j:=1 to length(st2)do if st1[i]=st2[j] then dp[i,j]:=dp[i-1,j-1]+1 else d