고급 7편] 파이썬으로 특정 이벤트 발생 시 자동 실행하기.zip
파이썬 자동화의 다음 단계는
단순한 시간 스케줄이 아닌,
**어떤 조건이 발생했을 때 자동으로 실행되는 구조**입니다.
이번 편에서는 특정 폴더에 새 파일이 생기면
곧바로 자동으로 반응하는 구조를 만들어봅니다.
예를 들어,
- 폴더에 이미지가 들어오면 자동 리사이징
- 새 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 폴더에 새 이미지 생기면 자동 전송
- 거래 명세서가 들어오면 자동 정리
- 다운로드 폴더에 특정 이름 포함된 파일이 생기면 푸시 알림
이 구조를 이해하면
“어떤 조건이 발생했을 때 알아서 동작하는”
진짜 자동화를 구성할 수 있습니다.