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的功能
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
