Pythonの下でファイルシステムを監視するためのpyinotifyパッケージの簡単な理解
2923 ワード
inotifyとは: Inotifyはイベント駆動の通知メカニズムであり、Inotifyは簡単なAPIを提供し、最小のファイル記述子を使用し、細粒度監視を可能にする.inotifyとの通信は、システム呼び出しによって実現される.使用可能な関数は次のとおりです: inotify_Initはinotifyインスタンスを作成するためのシステム呼び出しであり、そのインスタンスを指すファイル記述子を返します. inotify_init 1とinotify_Initは似ていて、追加のフラグが付いています.これらの追加フラグが指定されていない場合はinotify_が使用されます.initと同じ値です. inotify_add_watchは、ファイルまたはディレクトリのモニタリングを追加し、どのイベントをモニタリングする必要があるかを指定します.フラグは、既存のモニタリングにイベントを追加するかどうか、パスが1つのディレクトリを表しているかどうか、シンボルリンクを追跡するかどうか、一度にモニタリングを行うかどうかを制御し、最初のイベントが発生した後にモニタリングを停止します. inotify_rm_watchはモニタリングリストからモニタリング項目を削除します. readは、1つまたは複数のイベント情報を含むキャッシュを読み出す. closeはファイル記述子を閉じ、記述子上のすべての監視を除去する.インスタンスに関するすべてのファイル記述子が閉じられると、カーネルの再使用のためにリソースと下位オブジェクトが解放されます.
したがって、典型的なモニタでは、次の操作が必要です. inotifyを使用Initはファイル記述子 を開く 1 1または複数のモニタ を追加待機イベント は、イベントを処理し、その後、より多くのイベント に戻り、待機する.モニタが非アクティブになった場合、またはある信号を受信した後、ファイル記述子を閉じ、クリアし、終了する.
pyinotifyパッケージのインストール
Inotifyが監視できるファイルシステムイベントは次のとおりです.
IN_ACCESS、すなわちファイルアクセスIN_MODIFY、ファイルはwrite IN_ATTRIB、chmod、chown、touchなどのIN_CLOSE_WRITE、書き込み可能ファイルはclose IN_CLOSE_NOWRITE、書き込み不可ファイルはclose IN_OPEN、ファイルがオープンIN_MOVED_FROM、ファイルは移動され、mv IN_のようにMOVED_TO,mv,cp IN_のようなファイルが移される.CREATE、新しいファイルIN_を作成DELETE、rm IN_などのファイルが削除されましたDELETE_SELF、自己削除、すなわち実行可能ファイルが実行時に自己IN_を削除するMOVE_SELF、自己移動、すなわち実行可能ファイルが実行時に自己IN_を移動するUNMOUNT、ホストファイルシステムはumount IN_CLOSEは、ファイルが閉じられ、(IN_CLOSE_WRITE|IN_CLOSE_NOWRITE)IN_に等しいMOVE、ファイルが移動され、(IN_MOVED_FROM|IN_MOVED_TO)
pyinotify使用例
したがって、典型的なモニタでは、次の操作が必要です.
pyinotifyパッケージのインストール
git clone https://github.com/seb-m/pyinotify.git
cd pyinotify/
python setup.py install
Inotifyが監視できるファイルシステムイベントは次のとおりです.
IN_ACCESS、すなわちファイルアクセスIN_MODIFY、ファイルはwrite IN_ATTRIB、chmod、chown、touchなどのIN_CLOSE_WRITE、書き込み可能ファイルはclose IN_CLOSE_NOWRITE、書き込み不可ファイルはclose IN_OPEN、ファイルがオープンIN_MOVED_FROM、ファイルは移動され、mv IN_のようにMOVED_TO,mv,cp IN_のようなファイルが移される.CREATE、新しいファイルIN_を作成DELETE、rm IN_などのファイルが削除されましたDELETE_SELF、自己削除、すなわち実行可能ファイルが実行時に自己IN_を削除するMOVE_SELF、自己移動、すなわち実行可能ファイルが実行時に自己IN_を移動するUNMOUNT、ホストファイルシステムはumount IN_CLOSEは、ファイルが閉じられ、(IN_CLOSE_WRITE|IN_CLOSE_NOWRITE)IN_に等しいMOVE、ファイルが移動され、(IN_MOVED_FROM|IN_MOVED_TO)
pyinotify使用例
#!/usr/bin/env python
# encoding:utf-8
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)
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():
notifier.read_events()
except KeyboardInterrupt:
notifier.stop()
break
if __name__ == "__main__":
FSMonitor('/home/firefoxbug')