Python之pyinotify模塊的使用


inotify提供的事件表

IN_ACCESS         # 文件被讀取
IN_MODIFY         # 文件被修改
IN_ATTRIB         # 元數據被修改
IN_CLOSE_WRITE    # 打開且等待寫入的文件或目錄被關閉
IN_CLOSE_NOWRITE  # 只讀方式打開文件或目錄被關閉
IN_OPEN           # 文件或目錄被打開
IN_MOVED_FROM     # 監控的目錄中的條目被移出監控區域
IN_MOVED_TO       # 目錄或文件被移入監控區域
IN_CREATE         # 在被監控目錄中創建了子目錄或文件
IN_DELETE         # 被監控目錄中有子目錄或文件被刪除
IN_CLOSE          # 文件被關閉,等同於IN_CLOSE_WRITE
IN_MOVED          # 文件被移動,等同於IN_MOVED_FROM

1、pyinotify的作用

pyinotify是一個Python模塊,用來監測文件系統的變化。pyinotify依賴於Linux內核inotify功能。inotify是一個事件驅動的通知器,其通知接口從內核空間到用戶空間通過三個系統調用。
pyinotify結合這些系統調用,並提供一個頂級的抽象和一個通用的方式來處理這些功能
注意:
只有在Linux內核2.
6.13以后支持inotify的功能

2、pyinotify模塊的安裝

pip3 install pyinotify

3、安裝完成后,測試是否能正常使用

#開啟監控/tmp目錄的變化
[root@python-mysql ~]# python3 -m pyinotify /tmp

#在tmp目錄,創建一個文件
[root@python-mysql ~]# touch /tmp/test

#此時事件已經觸發,證明inotify功能是生效,可用的
[root@python-mysql ~]# python3 -m pyinotify /tmp
<Event dir=False mask=0x100 maskname=IN_CREATE name=test path=/tmp pathname=/tmp/test wd=1 >
<Event dir=False mask=0x20 maskname=IN_OPEN name=test path=/tmp pathname=/tmp/test wd=1 >
<Event dir=False mask=0x4 maskname=IN_ATTRIB name=test path=/tmp pathname=/tmp/test wd=1 >
<Event dir=False mask=0x8 maskname=IN_CLOSE_WRITE name=test path=/tmp pathname=/tmp/test wd=1 >

 4、監聽指定目錄所有的事件

import pyinotify

wm = pyinotify.WatchManager()

wm.add_watch('/tmp',pyinotify.ALL_EVENTS)

notifier = pyinotify.Notifier(wm)

notifier.loop()

 運行效果

#發出一個對tmp目錄的刪除事件
[root@python-mysql ~]# rm -f /tmp/test

[root@python-mysql ~]# python3 test.py 
<Event dir=False mask=0x200 maskname=IN_DELETE name=test path=/tmp pathname=/tmp/test wd=1 >

 5、監控目錄的創建與刪除事件的示例

import pyinotify

wm = pyinotify.WatchManager()

mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE

wm.add_watch('/tmp',mask)

notifier = pyinotify.Notifier(wm)

運行效果

#在tmp目錄創建與刪除
[root@python-mysql ~]# touch  /tmp/cyc
[root@python-mysql ~]# rm -f /tmp/cyc 

[root@python-mysql ~]# python3 test.py 
<Event dir=False mask=0x100 maskname=IN_CREATE name=cyc path=/tmp pathname=/tmp/cyc wd=1 >
<Event dir=False mask=0x200 maskname=IN_DELETE name=cyc path=/tmp pathname=/tmp/cyc wd=1 >

 6、監控目錄的創建與刪除事件並且對事件的處理的示例

import pyinotify

wm = pyinotify.WatchManager()

mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE

class EventHandler(pyinotify.ProcessEvent):
    def process_IN_CREATE(self,event):
        print("監控新創建目錄邏輯處理 路徑名字:%s" % event.pathname)

    def process_IN_DELETE(self,event):
        print("監控刪除目錄邏輯處理 路徑名字:%s" % event.pathname)

wm.add_watch('/tmp',mask)

handler = EventHandler()

notifier = pyinotify.Notifier(wm,handler)

notifier.loop()

運行效果 

#對tmp目錄進行創建,刪除
[root@python-mysql ~]# touch /tmp/cyc
[root@python-mysql ~]# rm -f /tmp/cyc

[root@python-mysql ~]# python3 test.py 
監控新創建目錄邏輯處理 路徑名字:/tmp/cyc
監控刪除目錄邏輯處理 路徑名字:/tmp/cyc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM