以下のコードは、私が望むようには機能しません。私がするときsvc.run()
、プログラムは大丈夫です。フォルダの動作ファイルに加えた変更。しかし、私がそうするとき、svc.stop()
それは正確に止まらないと思います。おそらく、糸脱毛の部分を行うためのより良い方法があるはずです...
import pyinotify
import threading
import time
import os
class fs_event_handler(pyinotify.ProcessEvent):
def __init__(self, callback):
self._callback = callback
def process_IN_CREATE(self, e):
self._callback(e.path, e.name, 'created')
def process_IN_DELETE(self, e):
self._callback(e.path, e.name, 'deleted')
def process_IN_MODIFY(self, e):
self._callback(e.path, e.name, 'modified')
class NotificationService():
def __init__(self, path, callback):
mask = pyinotify.IN_CREATE | pyinotify.IN_DELETE \
| pyinotify.IN_MODIFY
w = pyinotify.WatchManager()
self.__notifier = pyinotify.Notifier(w, fs_event_handler(callback))
wdd = w.add_watch(path, mask, rec=True, auto_add=True)
self.__loop = True
def start(self):
while self.__loop:
self.__notifier.process_events()
if self.__notifier.check_events():
self.__notifier.read_events()
def run(self):
fm = FileMonitor(self)
fm.start()
print 'Service Running...'
def stop(self):
self.__notifier.stop()
self.__loop = False
class FileMonitor(threading.Thread):
def __init__(self, srvc):
threading.Thread.__init__(self)
self.__svc = srvc
def run(self):
self.__svc.start()
print 'Service stopped'
def _callback(path, name, operation):
zpad = lambda x: ''.join(['0', str(x)])[:2]
ts = time.localtime()
t = ':'.join(map(zpad, [ts.tm_hour, ts.tm_min, ts.tm_sec]))
print t, ':', '%s was %s' % (os.path.join(path, name), operation)
p = '/home/deostroll/scripts/tmp'
svc = NotificationService(p, _callback)
svc.run()