watcher.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """跨平台文件监控 (Linux/macOS/Windows)"""
  4. from watchdog.observers import Observer
  5. from watchdog.events import FileSystemEventHandler
  6. import time
  7. class ChatFileHandler(FileSystemEventHandler):
  8. def __init__(self, callback, extensions):
  9. self.callback = callback
  10. self.extensions = extensions
  11. def _check(self, event):
  12. if event.is_directory:
  13. return
  14. path = event.src_path
  15. if any(path.endswith(ext) for ext in self.extensions):
  16. self.callback(path, event.event_type)
  17. def on_created(self, event):
  18. self._check(event)
  19. def on_modified(self, event):
  20. self._check(event)
  21. class ChatWatcher:
  22. def __init__(self, paths: list, callback, extensions=('.jsonl', '.json')):
  23. self.observer = Observer()
  24. handler = ChatFileHandler(callback, extensions)
  25. for path in paths:
  26. self.observer.schedule(handler, path, recursive=True)
  27. def start(self):
  28. self.observer.start()
  29. try:
  30. while True:
  31. time.sleep(1)
  32. except KeyboardInterrupt:
  33. self.stop()
  34. def stop(self):
  35. self.observer.stop()
  36. self.observer.join()