엑셀 피벗 테이블 클릭 노가다 끝! 파이썬으로 자동 생성하기
지금까지 엑셀 자동화, 이메일 발송, 데이터 수집, 파일 정리 등 다양한 파이썬 자동화 스크립트를 만들었습니다. 그런데 스크립트를 직접 실행해야 한다면 완전한 자동화라고 할 수 없습니다. "매일 오전 9시에 주식 데이터 수집", "매주 월요일에 보고서 이메일 발송", "매달 말일에 폴더 백업"처럼 사람이 없어도 정해진 시간에 자동으로 실행되어야 진짜 자동화입니다.
이 글에서는 파이썬 스케줄링의 두 가지 핵심 방법인 schedule 라이브러리와 윈도우 작업 스케줄러를 비교하고, 상황에 맞는 방법을 선택하는 기준까지 완전 정복합니다.
두 방법은 목적이 조금 다릅니다. 어떤 방법이 본인 상황에 맞는지 먼저 확인하세요.
schedule 라이브러리 윈도우 작업 스케줄러 설정 방법 코드 안에서 설정 윈도우 UI에서 설정 PC 재시작 후 재실행 필요 자동 재실행 가능 터미널 창 필요 필요 (백그라운드 가능) 불필요 N분마다 실행 매우 쉬움 설정 복잡 PC 꺼져있을 때 실행 안 됨 실행 안 됨 여러 작업 관리 코드 한 곳에서 관리 각각 별도 등록 필요 추천 용도 개발·테스트, 단순 반복 실무 장기 운영
💡 선택 기준: 개발 중이거나 N분마다 반복 실행이 필요하면 schedule 라이브러리, PC 재시작 후에도 자동 실행이 필요한 실무 운영 환경이라면 윈도우 작업 스케줄러를 사용하세요.
pip install schedule
아래 코드를 scheduler.py로 저장하고 실행하면 설정한 시간마다 자동으로 지정한 함수가 실행됩니다.
import schedule
import time
import subprocess
from datetime import datetime
# ① 실행할 작업 함수 정의
def run_script(script_path):
"""지정한 파이썬 스크립트를 실행하는 함수"""
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f" [{now}] 실행 시작: {script_path}")
try:
result = subprocess.run(
["python", script_path],
capture_output=True, text=True, timeout=300 # 5분 타임아웃
)
if result.returncode == 0:
print(f" ✔ 성공: {script_path}")
else:
print(f" ✘ 오류: {result.stderr[:200]}")
except subprocess.TimeoutExpired:
print(f" ✘ 타임아웃: {script_path}")
except Exception as e:
print(f" ✘ 실패: {e}")
# ② 스크립트 경로 설정
STOCK_SCRIPT = r"C:\Users\내이름\Desktop\자동화\collect_finance.py"
WEATHER_SCRIPT = r"C:\Users\내이름\Desktop\자동화\weather.py"
BACKUP_SCRIPT = r"C:\Users\내이름\Desktop\자동화\auto_backup.py"
EMAIL_SCRIPT = r"C:\Users\내이름\Desktop\자동화\auto_email.py"
# ③ 스케줄 등록 (원하는 항목만 주석 해제)
# 매일 오전 9시: 주식·환율 데이터 수집
schedule.every().day.at("09:00").do(run_script, STOCK_SCRIPT)
# 매일 오전 8시 50분: 날씨 데이터 수집
schedule.every().day.at("08:50").do(run_script, WEATHER_SCRIPT)
# 매일 오후 6시: 폴더 자동 백업
schedule.every().day.at("18:00").do(run_script, BACKUP_SCRIPT)
# 매주 월요일 오전 9시 10분: 주간 보고 이메일 발송
schedule.every().monday.at("09:10").do(run_script, EMAIL_SCRIPT)
# 30분마다: 인터넷 속도 측정
# schedule.every(30).minutes.do(run_script, SPEED_SCRIPT)
# ④ 스케줄러 실행 (종료하려면 Ctrl+C)
print(f"▶ 스케줄러 시작: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(" 등록된 스케줄:")
for job in schedule.jobs:
print(f" - {job}")
print(" 종료: Ctrl+C\n")
while True:
schedule.run_pending()
time.sleep(30)
실행 후 터미널에 등록된 스케줄 목록이 출력되고, 설정한 시간이 되면 자동으로 해당 스크립트가 실행됩니다.
PC를 재시작해도 자동 실행되게 하려면 윈도우 작업 스케줄러에 등록해야 합니다.
프로그램/스크립트: pythonw 인수 추가: "C:\Users\내이름\Desktop\자동화\collect_finance.py" 시작 위치: C:\Users\내이름\Desktop\자동화
⚠️ 중요 설정: 작업을 만든 후 반드시 "속성"에서 아래 두 항목을 확인하세요. 첫째, "최고 권한으로 실행"에 체크해야 파일 접근 권한 오류를 방지합니다. 둘째, "배터리 전원 사용 시에도 실행"에 체크해야 노트북 사용 시에도 실행됩니다.
매번 UI를 클릭하기 번거롭다면 파이썬 코드로 작업 스케줄러에 자동 등록할 수 있습니다. 아래 코드를 register_task.py로 저장하고 관리자 권한으로 실행하세요.
import subprocess
# ① 등록할 작업 설정
TASK_NAME = "파이썬_주식데이터_수집"
SCRIPT_PATH = r"C:\Users\내이름\Desktop\자동화\collect_finance.py"
RUN_TIME = "09:00" # ← 실행 시간 (HH:MM 형식)
SCHEDULE = "DAILY" # ← DAILY / WEEKLY / MONTHLY
# ② 명령어 구성
cmd = [
"schtasks", "/Create",
"/TN", TASK_NAME,
"/TR", f'pythonw "{SCRIPT_PATH}"',
"/SC", SCHEDULE,
"/ST", RUN_TIME,
"/RL", "HIGHEST", # 최고 권한으로 실행
"/F", # 같은 이름 작업 덮어쓰기
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == 0:
print(f"✅ 작업 등록 완료: {TASK_NAME}")
print(f" 실행 시간: 매일 {RUN_TIME}")
else:
print(f"✘ 등록 실패: {result.stderr}")
print(" 관리자 권한으로 실행했는지 확인하세요.")
오류 1: 작업 스케줄러에서 스크립트가 실행되지 않음
가장 흔한 원인은 경로 문제입니다. "시작 위치"에 스크립트가 있는 폴더 경로를 반드시 입력해야 합니다. 또한 pythonw 대신 python의 전체 경로(예: C:\Python312\python.exe)를 입력하면 더 안정적으로 실행됩니다.
오류 2: schedule 라이브러리가 터미널을 닫으면 중단됨
터미널 창을 닫으면 스케줄러가 중단됩니다. 백그라운드에서 계속 실행하려면 아래처럼 pythonw로 실행하세요:
pythonw scheduler.py
오류 3: 스크립트 실행 중 오류가 발생해도 알 수 없음
자동 실행 시 오류가 터미널에 출력되지 않아 문제를 파악하기 어렵습니다. 코드 안에 로그 파일을 남기도록 아래 코드를 추가하세요:
import logging
from pathlib import Path
LOG_PATH = r"C:\Users\내이름\Desktop\자동화\실행로그.txt"
logging.basicConfig(
filename=LOG_PATH,
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s",
encoding="utf-8"
)
logging.info("스크립트 시작")
# ... 기존 코드 ...
logging.info("스크립트 완료")
지금까지 이 블로그에서 소개한 자동화 스크립트들을 스케줄러로 연결하면 완전한 업무 자동화 파이프라인이 완성됩니다.
매일 오전 08:50 → 날씨 데이터 수집 후 텔레그램 알림 매일 오전 09:00 → 주식·환율 데이터 수집 후 엑셀 저장 매일 오전 09:05 → 수집 데이터로 차트 이미지 자동 생성 매일 오전 09:10 → 차트·데이터 이메일 자동 발송 매일 오후 03:40 → 장 마감 후 주식 데이터 재수집 매일 오후 06:00 → 업무 폴더 자동 백업 (ZIP 압축) 매주 월요일 09:00 → 주간 보고서 자동 생성 및 발송 매달 말일 18:00 → 월간 데이터 집계 후 엑셀 저장
💡 시리즈 전체 연결: 이 블로그의 모든 자동화 편을 조합하면 데이터 수집 → 처리 → 저장 → 시각화 → 발송 → 백업까지 사람 손 없이 완전 자동으로 돌아가는 업무 시스템을 만들 수 있습니다.
이 코드를 응용하면 리눅스 서버에서 crontab으로 스케줄링하거나, 클라우드 함수(AWS Lambda, GCP Cloud Functions)로 서버리스 자동화를 구성하는 것도 가능합니다.