2012年1月25日 星期三

monitor filesystem events by python

似乎各大 os 都不同, 沒有統一的方法。
ref 1 是使用 pyinotify 在 linux 下的範例。
ref:
  1. http://david-latham.blogspot.com/2008/06/python-inotify-pyinotify-how-to-watch.html
  2. http://pyinotify.sourceforge.net/
  3. http://www.stepthreeprofit.com/2008/06/cross-platform-monitoring-of-filesystem.html

file_monitor.py
 1 #!/usr/bin/python
 2 import os
 3 import pyinotify
 4 import sys
 5
 6 #ref: http://david-latham.blogspot.com/2008/06/python-inotify-pyinotify-how-to-watch.html
 7
 8 wm = pyinotify.WatchManager()
 9 mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE | pyinotify.IN_MODIFY | 
            pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO
10
11 class PTmp(pyinotify.ProcessEvent):
12     # move file to /mnt
13     def process_IN_MOVED_TO(self, event):
14         print "move to: %s " % os.path.join(event.path, event.name)
15     def process_IN_MOVED_FROM(self, event):
16         print "move from: %s " % os.path.join(event.path, event.name)
17     def process_IN_CREATE(self, event):
18         print "Create: %s " % os.path.join(event.path, event.name)
19
20 #    def process_IN_DELETE(self, event):
21 #        print "Delete: %s " % os.path.join(event.path, event.name)
22     def process_IN_MODIFY(self, event):
23         print "Modify: %s " % os.path.join(event.path, event.name)
24
25
26 notifier = pyinotify.Notifier(wm, PTmp())
27
28 m_dir='/mnt/'
29 wdd = wm.add_watch(m_dir, mask, rec=True)
30 print "monitor:", m_dir
31
32 while True:
33     try:
34         notifier.process_events()
35         if notifier.check_events():
36             notifier.read_events()
37     except KeyboardInterrupt:
38         notifier.stop()
39         break

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。