-
-
Notifications
You must be signed in to change notification settings - Fork 731
Open
Labels
Description
The simple directory-watching script is below:
import logging
import sys
import time
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
class MyEventHandler(FileSystemEventHandler):
def __init__(self, observer, log):
self.log = log
self.observer = observer
def on_created(self, event):
self.log.info("%s", event)
def main(argv):
logging.basicConfig(format = '%(asctime)s %(levelname)-8s %(message)s',
datefmt = '%Y-%m-%d %H:%M:%S',
level = logging.DEBUG)
log = logging.getLogger(__name__)
path = argv[1]
observer = Observer()
log.debug('Created observer %s', observer)
event_handler = MyEventHandler(observer, log)
observer.schedule(event_handler, path, recursive = False)
observer.start()
observer.join()
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))Started as something like ./fpounce.py /tmp it works, but the observer-thread crashes as soon as a file is created in the watched directory (/tmp) by some other user (such as the www):
2025-07-09 14:30:41 DEBUG Created observer <KqueueObserver(Thread-1, initial daemon)>
2025-07-09 14:30:42 INFO FileCreatedEvent(src_path='/tmp/sess_e645f55f69770d25a08b8210245510f6', dest_path='', event_type='created', is_directory=False, is_synthetic=False)
Exception in thread Thread-2:
Traceback (most recent call last):
File "/opt/lib/python3.11/threading.py", line 1045, in _bootstrap_inner
self.run()
File "/opt/lib/python3.11/site-packages/watchdog/observers/api.py", line 158, in run
self.queue_events(self.timeout)
File "/opt/lib/python3.11/site-packages/watchdog/observers/kqueue.py", line 630, in queue_events
self.queue_event(FileCreatedEvent(file_created))
File "/opt/lib/python3.11/site-packages/watchdog/observers/kqueue.py", line 481, in queue_event
self._register_kevent(event.src_path, is_directory=event.is_directory)
File "/opt/lib/python3.11/site-packages/watchdog/observers/kqueue.py", line 435, in _register_kevent
self._descriptors.add(path, is_directory=is_directory)
File "/opt/lib/python3.11/site-packages/watchdog/observers/kqueue.py", line 215, in add
self._add_descriptor(KeventDescriptor(path, is_directory=is_directory))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/lib/python3.11/site-packages/watchdog/observers/kqueue.py", line 294, in __init__
self._fd = os.open(path, WATCHDOG_OS_OPEN_FLAGS)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '/tmp/sess_e645f55f69770d25a08b8210245510f6'
Why is it trying to open the newly-created files? Can I disable this somehow -- or make failures non-fatal?
This is on FreeBSD using python-3.11 and watchdog-6.0.0.
Testing the same code on Linux -- no problem there with python-3.6 and watchdog-2.1.9. The new files are duly reported and that's it.