您需要子类化,并在分派中做任何您想做的事情:
import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
class Event(LoggingEventHandler):
def dispatch(self, event):
print("Foobar")
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%s')
path = sys.argv[1] if len(sys.argv) > 1 else '.'
event_handler = Event()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
如果运行该代码,则Foobar
每当检测到更改时都会看到输出,要忽略文件,您可能需要使用[events.PatternMatchingEventHandler] [1]。每种都有各种方法
要在某物被修改的情况下做某事,我们可以重写on_modified
:
class Event(LoggingEventHandler):
def on_modified(self, event):
print("Doh")
使用上面的类和event_handler = Event()
并更改文件来运行代码将输出如下内容:
Doh
Doh
Doh
Doh
Doh
Doh
Doh
2015-10-03 15:33:55 - Created file: ./test.txt___jb_bak___
2015-10-03 15:33:55 - Moved file: from ./test.txt to ./test.txt___jb_old___
2015-10-03 15:33:55 - Moved file: from ./test.txt___jb_bak___ to ./test.txt
2015-10-03 15:33:55 - Deleted file: ./test.txt___jb_old___
Doh
[1]:您可以覆盖http://pythonhosted.org/watchdog/api.html#watchdog.events.PatternMatchingEventHandlerEventHandler
类,这完全取决于您要执行的操作。该LoggingEventHandler
班itslef是的子类watchdog.events.FileSystemEventHandler
:
基础:对象
Base file system event handler that you can override methods from.
调度到适当的方法。
Parameters: event (FileSystemEvent) – The event object representing the file system event.
捕获所有事件处理程序。
Parameters: event (FileSystemEvent) – The event object representing the file system event.
Parameters: event (DirCreatedEvent or FileCreatedEvent) – Event representing file/directory creation.
Parameters: event (DirDeletedEvent or FileDeletedEvent) – Event representing file/directory deletion.
Parameters: event (DirModifiedEvent or FileModifiedEvent) – Event representing file/directory modification.
Parameters: event (DirMovedEvent or FileMovedEvent) – Event representing file/directory movement.