파일 시스템 변경 모니터링: watchdog
라이브러리 사용하기
Overview
파일 시스템의 변경 사항을 모니터링하는 것은 다양한 소프트웨어 개발 작업에서 매우 중요한 요소입니다. 예를 들어, 로그 파일의 변경을 감지하거나, 이미지 파일이 추가되었을 때 자동으로 처리하는 작업 등이 있습니다. Python의 watchdog
라이브러리는 이러한 파일 시스템의 변화를 쉽게 감지하고, 그에 따라 특정 동작을 수행할 수 있도록 도와주는 유용한 도구입니다. 이번 글에서는 watchdog
라이브러리를 사용하여 파일이 추가되거나 수정될 때 이를 감지하고, 이에 따른 행동을 트리거하는 방법을 자세히 설명하겠습니다.
watchdog
라이브러리 설치
먼저, watchdog
라이브러리를 설치해야 합니다. 다음의 명령어를 사용하여 pip로 설치할 수 있습니다.
pip install watchdog
설치가 완료되면, 파일 시스템을 모니터링할 준비가 되었습니다.
기본 사용법
watchdog
라이브러리는 파일 시스템의 이벤트를 감지하는 이벤트 핸들러와 모니터를 포함하고 있습니다. 이 라이브러리는 플랫폼에 상관없이 파일 시스템 이벤트를 감지할 수 있으며, Windows, macOS, Linux에서 모두 사용할 수 있습니다.
이벤트 핸들러 정의
파일 시스템의 변경 사항을 처리하기 위해 이벤트 핸들러를 정의해야 합니다. 예를 들어, 파일이 추가되거나 수정될 때 로그를 남기는 간단한 핸들러를 만들어보겠습니다.
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
class MyEventHandler(FileSystemEventHandler):
def on_created(self, event):
print(f"파일이 생성되었습니다: {event.src_path}")
def on_modified(self, event):
print(f"파일이 수정되었습니다: {event.src_path}")
def on_deleted(self, event):
print(f"파일이 삭제되었습니다: {event.src_path}")
def on_moved(self, event):
print(f"파일이 이동되었습니다: {event.src_path} -> {event.dest_path}")
위 코드는 파일이 생성, 수정, 삭제, 이동될 때 각각의 이벤트에 대해 로그를 출력하는 핸들러입니다.
모니터 설정
이제 이벤트 핸들러를 설정한 후, 특정 디렉토리를 모니터링하는 코드를 작성해야 합니다. 다음 코드를 통해 특정 경로를 모니터링할 수 있습니다.
if __name__ == "__main__":
path = "/path/to/monitor" # 모니터링할 디렉토리 경로
event_handler = MyEventHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True) # recursive=True: 하위 디렉토리도 모니터링
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
코드 설명
- 이벤트 핸들러:
MyEventHandler
클래스는FileSystemEventHandler
를 상속받아 파일의 생성, 수정, 삭제, 이동 이벤트에 대해 각각의 메서드를 구현하고 있습니다. - 모니터 설정:
Observer
객체를 생성하고,schedule
메서드를 통해 모니터링할 경로와 이벤트 핸들러를 연결합니다.recursive=True
를 설정하면 하위 디렉토리도 모니터링할 수 있습니다. - 루프 유지:
while True
루프는 프로그램이 종료되지 않도록 유지합니다.KeyboardInterrupt
를 통해 사용자가 Ctrl+C를 눌렀을 때 모니터링을 중지합니다.
에러 처리
이 프로그램을 실행하는 도중 발생할 수 있는 몇 가지 에러와 그 해결 방법을 살펴보겠습니다.
- PermissionError: 특정 디렉토리를 모니터링할 권한이 없을 경우 발생합니다.
- 해결 방법: 관리자 권한으로 실행하거나, 권한이 있는 디렉토리를 선택합니다.
- FileNotFoundError: 지정한 경로가 존재하지 않을 경우 발생합니다.
- 해결 방법: 모니터링할 경로를 정확히 입력했는지 확인합니다.
- RecursionError: 하위 디렉토리를 무한히 감지하는 경우 발생합니다.
- 해결 방법: 무한 루프에 빠지지 않도록 모니터링할 디렉토리 구조를 잘 설계합니다.
실제 예시
예를 들어, 웹 애플리케이션의 이미지 업로드 기능을 만들고 있다고 가정해봅시다. 사용자가 이미지를 업로드하면, 그 이미지를 특정 폴더에 저장하고, 저장된 이미지를 자동으로 처리하는 기능을 추가하고 싶습니다. 이럴 때 watchdog
를 사용하여 이미지를 감지하고, 이미지 처리 함수를 호출할 수 있습니다.
from PIL import Image
class MyEventHandler(FileSystemEventHandler):
def on_created(self, event):
if event.src_path.endswith(".jpg") or event.src_path.endswith(".png"):
print(f"새 이미지가 생성되었습니다: {event.src_path}")
self.process_image(event.src_path)
def process_image(self, path):
with Image.open(path) as img:
img.thumbnail((128, 128))
img.save(f"thumbnail_{path.split('/')[-1]}")
print(f"썸네일이 생성되었습니다: thumbnail_{path.split('/')[-1]}")
# 나머지 코드는 위와 동일
위 코드는 새로운 이미지 파일이 생성되면 해당 파일의 썸네일을 생성하는 예제입니다.
참고문서
이제 watchdog
라이브러리를 사용하여 파일 시스템 변경을 모니터링하고, 다양한 동작을 자동으로 수행하는 방법에 대해 잘 이해하셨기를 바랍니다!
'Study Information Technology' 카테고리의 다른 글
SMTP를 이용한 이메일 자동화 및 맞춤형 이메일 템플릿 만들기 (0) | 2024.10.21 |
---|---|
커맨드라인 유틸리티로 Docker와 Kubernetes를 이용한 애플리케이션 배포 자동화하기 (0) | 2024.10.21 |
대규모 데이터셋 자동 정제 및 처리 Pandas 활용하기 (0) | 2024.10.21 |
자동으로 주식 데이터를 다운로드하고 분석하는 금융 분석 도구 만들기 (0) | 2024.10.21 |
Selenium으로 웹 브라우저 자동화 스크립트 만들기 (0) | 2024.10.21 |