Skip to content

Instantly share code, notes, and snippets.

@jclosure
Last active January 23, 2024 11:16
Show Gist options
  • Save jclosure/0132eac63e8c8ec9b22bd59280603e3e to your computer and use it in GitHub Desktop.
Save jclosure/0132eac63e8c8ec9b22bd59280603e3e to your computer and use it in GitHub Desktop.
Using watchdog to inspect all changes for a dir + pattern. Useful for seeing all activity during debugging inotify handlers.
import logging
import os
import time
import traceback
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
MAP_DATA_DIR = "/tmp/foo"
logging.basicConfig( level=logging.INFO)
def get_observer(path="."):
patterns = ["*"]
event_handler = PatternMatchingEventHandler(
patterns=patterns,
ignore_patterns=[],
ignore_directories=True,
case_sensitive=False
)
def on_closed(event):
logging.info(f"FILE WRITTEN AT {event.src_path}")
try:
with open(event.src_path, 'rb') as f:
buf = f.read()
logging.info(f"FILE SIZE: {len(buf)}")
except:
traceback.print_exc()
def on_any_event(event):
logging.info(f"EVENT FIRED {event}")
event_handler.on_created = on_closed
# event_handler.on_any_event = on_any_event
go_recursively = True
fs_observer = Observer()
fs_observer.schedule(event_handler, path, recursive=go_recursively)
return fs_observer
def run_observer():
if not os.path.exists(MAP_DATA_DIR):
os.makedirs(MAP_DATA_DIR)
fs_observer = get_observer(MAP_DATA_DIR)
try:
fs_observer.start()
# while fs_observer.isAlive():
# fs_observer.join(1)
fs_observer.join()
except KeyboardInterrupt:
# fs_observer.stop()
pass
# fs_observer.join()
if __name__ == '__main__':
run_observer()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment