이 글에서는 주로 Python의 파일 변경 모니터링 예제(watchdog)를 소개합니다. 편집자께서 꽤 괜찮다고 생각하셔서 지금 공유하고 참고용으로 올려드리겠습니다. 편집기를 따라 살펴보겠습니다
Python에는 파일 모니터링을 위한 두 가지 주요 라이브러리가 있습니다. 하나는 pyinotify(https://github.com/seb-m/pyinotify/wiki)이고 다른 하나는 watchdog(http:/ / pythonhosted.org/watchdog/). pyinotify는 다양한 플랫폼의 이벤트를 캡슐화하는 Linux 플랫폼의 inotify를 사용합니다. 저는 주로 Windows 플랫폼에서 사용하기 때문에 아래에서는 watchdog에 중점을 두겠습니다(원리를 깊이 이해하는 데 도움이 되는 watchdog 구현 소스 코드를 읽어보는 것이 좋습니다).
watchdog은 다양한 플랫폼에서 파일 감지를 위해 다양한 방법을 사용합니다. init.py에서 다음 주석이 발견되었습니다.
|Inotify| Linux 2.6.13+ ``inotify(7)`` based observer |FSEvents| Mac OS X FSEvents based observer |Kqueue| Mac OS X and BSD with kqueue(2) ``kqueue(2)`` based observer |WinApi|(ReadDirectoryChangesW) MS Windows Windows API-based observer |Polling| Any fallback implementation
샘플 코드는 다음과 같습니다.
from watchdog.observers import Observer from watchdog.events import * import time class FileEventHandler(FileSystemEventHandler): def __init__(self): FileSystemEventHandler.__init__(self) def on_moved(self, event): if event.is_directory: print("directory moved from {0} to {1}".format(event.src_path,event.dest_path)) else: print("file moved from {0} to {1}".format(event.src_path,event.dest_path)) def on_created(self, event): if event.is_directory: print("directory created:{0}".format(event.src_path)) else: print("file created:{0}".format(event.src_path)) def on_deleted(self, event): if event.is_directory: print("directory deleted:{0}".format(event.src_path)) else: print("file deleted:{0}".format(event.src_path)) def on_modified(self, event): if event.is_directory: print("directory modified:{0}".format(event.src_path)) else: print("file modified:{0}".format(event.src_path)) if __name__ == "__main__": observer = Observer() event_handler = FileEventHandler() observer.schedule(event_handler,"d:/dcm",True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
watchdog은 주로 관찰자 모델을 사용합니다(말도 안되는 소리, 변수 이름을 보면 알 수 있습니다). 관찰자, 이벤트 처리기 및 모니터링되는 폴더의 세 가지 주요 역할이 있습니다. 세 개는 원래 독립적이며 주로 관찰자.schedule 함수를 통해 연결됩니다. 즉, 관찰자는 모니터링 폴더의 변경 사항을 감지하기 위해 플랫폼 종속 코드를 지속적으로 감지하고 호출하며, 변경 사항이 발견되면 처리를 위해 event_handler에 통보됩니다. . 마지막으로, 시간이 나면 Watchdog의 소스 코드를 읽어 보시기를 적극 권장합니다. 이 소스 코드는 이해하기 쉽고 구조도 좋습니다.
위 내용은 Python의 파일 변경 모니터링 워치독 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!