import time
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
class MyHandler(PatternMatchingEventHandler):
def on_created(self, event):
print(f'event type: {event.event_type} path : {event.src_path} isdir : {event.is_directory}')
event_handler = MyHandler(patterns=['*'],ignore_patterns=['*.txt'])
observer = Observer()
observer.schedule(event_handler, path='watch/', recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
我有这个简单的观察程序,其目的是记录所有非.txt
的文件或目录。我不确定这是错误还是我不理解的错误。
当我将observer.schedule
设置为recursive=True
,然后将多个目录(其中包含文件)复制到监视的文件夹中时,将仅记录一个目录及其子文件,而不会触发其他子目录事件处理程序。一个接一个地移动每个目录将分别记录每个目录,问题仅在于多次移动时。我正在使用Windows 10,并且正在移动3个目录,每个目录包含大约10个文件。
如果我更改recursive=False
,则所有目录和子文件夹都将正确记录。我真的不知道有什么区别,因为除了上述行为之外,无论子文件是否递归,都会记录子文件。
编辑:
我在watchdogs git上提出了一个问题,并提供了更多详细信息