>  기사  >  백엔드 개발  >  Python의 파일 변경 모니터링 워치독 예

Python의 파일 변경 모니터링 워치독 예

黄舟
黄舟원래의
2017-10-16 11:03:282203검색

이 글에서는 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.