PYTHON/고급학습

고급 7편] 파이썬으로 특정 이벤트 발생 시 자동 실행하기.zip

Kim.Sung 2025. 5. 19. 09:56

파이썬 자동화의 다음 단계는  
단순한 시간 스케줄이 아닌,  
**어떤 조건이 발생했을 때 자동으로 실행되는 구조**입니다.


이번 편에서는 특정 폴더에 새 파일이 생기면  
곧바로 자동으로 반응하는 구조를 만들어봅니다.

예를 들어,

- 폴더에 이미지가 들어오면 자동 리사이징  
- 새 PDF가 생기면 클라우드 업로드  
- 특정 이름의 로그 파일이 생기면 경고 메시지 발송

이런 작업을 사람이 직접 확인하지 않고도  
자동으로 실행되게 만드는 것이 목표입니다.

👁‍🗨 사용할 패키지: `watchdog`

```
pip install watchdog
```

📁 예시 조건

- 감시 대상 폴더: `input_images/`  
- 대상 확장자: `.jpg`, `.png`  
- 새 파일이 생기면 → 리사이징 후 `output/`에 저장

🐍 파이썬 코드 예시

```python
import os
import time
from PIL import Image
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class ImageHandler(FileSystemEventHandler):
    def on_created(self, event):
        if event.is_directory:
            return
        ext = os.path.splitext(event.src_path)[1].lower()
        if ext in ['.jpg', '.png']:
            self.resize_image(event.src_path)

    def resize_image(self, path):
        with Image.open(path) as img:
            resized = img.resize((640, 480))
            filename = os.path.basename(path)
            out_path = os.path.join('output', filename)
            os.makedirs('output', exist_ok=True)
            resized.save(out_path)
            print(f'✅ 리사이징 완료: {out_path}')

if __name__ == "__main__":
    observer = Observer()
    observer.schedule(ImageHandler(), path='input_images', recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
```

📌 구조 설명

- `input_images` 폴더를 실시간 감시  
- 새 이미지가 생기면 자동으로 `resize_image()` 호출  
- 출력은 `output` 폴더에 저장  
- 사용자는 파일만 던져넣으면 끝

🎯 응용 아이디어

- CCTV 폴더에 새 이미지 생기면 자동 전송  
- 거래 명세서가 들어오면 자동 정리  
- 다운로드 폴더에 특정 이름 포함된 파일이 생기면 푸시 알림

이 구조를 이해하면  
“어떤 조건이 발생했을 때 알아서 동작하는”  
진짜 자동화를 구성할 수 있습니다.