我很高兴使用 watchdog 包,特别是PollingObserver来监视目录中的文件事件。它工作得很好 - 直到我正在观看的目录被删除。接下来发生的是轮询目录的代码调用stat(),并引发异常。处理这个问题的最佳方法是什么?我不知道如何捕获此异常,因为它位于单独的线程中。
示例代码:
import sys
import time
import logging
from watchdog.observers.polling import PollingObserver
from watchdog.events import LoggingEventHandler
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
path = sys.argv[1] if len(sys.argv) > 1 else '.'
event_handler = LoggingEventHandler()
observer = PollingObserver()
print("Watching: ", path)
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Run Code Online (Sandbox Code Playgroud)
要明白我的意思,请将现有目录作为参数传递,然后将其删除。