NOTE: The issue here is beyond the control of the library authors, so treat this issue as a warning.
Issue
I tried making a program that watches for file changes in a Windows drive. Assume that I have the following file structure, where watchdog_test.py is the main Python script:
import time
from watchdog.events import FileSystemEventHandler, FileSystemEvent
from watchdog.observers import Observer
class Handler(FileSystemEventHandler):
def on_any_event(self, event: FileSystemEvent) -> None:
print(f':: Something happened to {event.src_path}!')
handler = Handler()
observer = Observer()
observer.schedule(handler, 'assets/raw/text', recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print('[] Shutting down...')
finally:
observer.stop()
observer.join()
For some reason, it sometimes detects file changes when trying to check the current directory (path for the Observer is set to '.'), but not when watching a specific path (just like above). This code, however, works fantastically when running in Windows watching paths in Windows drives (e.g. C:), as well as in Linux (WSL) watching paths in the WSL drives.
Cause
This issue is caused by the lack of support of file notification support in the 9P protocol servers in Windows and WSL[1], which does affect inotify, which watchdog uses in Linux. This prevents watchdog from watching changes in Windows drive paths inside WSL.
Workaround
Use PollingObserver when you're trying to watch files in Windows drives from WSL.
Possible Action Plan
Since this issue is practically unfixable until complete inotify support for files in Windows drives is added, the documentation might have to be updated to let users know about this issue.
NOTE: The issue here is beyond the control of the library authors, so treat this issue as a warning.
Issue
I tried making a program that watches for file changes in a Windows drive. Assume that I have the following file structure, where
watchdog_test.py
is the main Python script:watchdog_test.py
has the following code:For some reason, it sometimes detects file changes when trying to check the current directory (
path
for theObserver
is set to'.'
), but not when watching a specific path (just like above). This code, however, works fantastically when running in Windows watching paths in Windows drives (e.g.C:
), as well as in Linux (WSL) watching paths in the WSL drives.Cause
This issue is caused by the lack of support of file notification support in the 9P protocol servers in Windows and WSL[1], which does affect inotify, which
watchdog
uses in Linux. This preventswatchdog
from watching changes in Windows drive paths inside WSL.Workaround
Use
PollingObserver
when you're trying to watch files in Windows drives from WSL.Possible Action Plan
Since this issue is practically unfixable until complete inotify support for files in Windows drives is added, the documentation might have to be updated to let users know about this issue.
References
[1] - https://youtu.be/lwhMThePdIo?si=NW7fBHIQN7iOosKR&t=3166