Python 스크립트를 다 만들어놓고도 매일 직접 실행하고 있다면, 작업 스케줄러(Task Scheduler)를 아직 설정하지 않은 겁니다. Windows에 기본 내장된 이 도구를 활용하면 별도 프로그램 없이 원하는 시각에 Python 스크립트를 자동 실행할 수 있습니다. 여기에 한 가지 함정이 있는데, UTF-8 인코딩 처리를 빠뜨리면 한글이 깨져서 결과물이 무용지물이 됩니다. 이 글에서는 설정 순서와 인코딩 처리 방법을 함께 정리합니다.
Windows 작업 스케줄러란

작업 스케줄러(Task Scheduler)는 Windows에 기본 내장된 자동화 도구입니다. 특정 시각, 요일, 조건(PC 부팅, 로그인 등)에 맞춰 프로그램이나 스크립트를 자동으로 실행할 수 있습니다.
Python 자동화 스크립트를 만들었다면 마지막 단계가 바로 이 작업 스케줄러 등록입니다. 매일 오전 9시에 데이터를 수집하거나, 매주 월요일에 리포트를 생성하는 작업을 사람 손 없이 돌릴 수 있습니다.
| 방식 | 매일 실행하려면 | 한계 |
|---|---|---|
| 수동 실행 | 매일 직접 터미널 열고 명령어 입력 | 빠뜨리면 그날 작업 없음 |
| 작업 스케줄러 | 최초 1회 등록 후 자동 실행 | PC가 켜져 있어야 함 |
Python 자동 실행 등록 — 단계별 순서
1단계 — 작업 스케줄러 열기
Windows 검색창에 작업 스케줄러 또는 Task Scheduler를 입력하고 실행합니다. 또는 실행창(Win + R)에 taskschd.msc를 입력해도 됩니다.
2단계 — 새 작업 만들기
오른쪽 패널에서 기본 작업 만들기를 클릭합니다. 이름과 설명을 입력하는 창이 나옵니다. 나중에 구분하기 쉽도록 스크립트 목적을 이름에 넣는 것이 좋습니다. 예: daily_news_collect
3단계 — 트리거 설정 (매일 09시)
트리거 탭에서 매일을 선택하고 시작 시각을 오전 09:00:00으로 지정합니다. 반복 간격은 기본값인 1일로 두면 됩니다.
4단계 — 동작 설정 (핵심)
동작 탭에서 프로그램 시작을 선택합니다. 여기서 두 가지를 정확히 입력해야 합니다.
- 프로그램/스크립트: Python 실행 파일 전체 경로
예:C:\Users\사용자명\AppData\Local\Programs\Python\Python311\python.exe - 인수 추가: 실행할 .py 파일 전체 경로
예:C:\Users\사용자명\projects\collect.py
Python 실행 파일 경로를 모를 경우 터미널에서 where python을 입력하면 확인할 수 있습니다.
5단계 — 시작 위치 지정
동작 설정 창의 시작 위치(옵션) 항목에 .py 파일이 있는 폴더 경로를 입력합니다. 이 항목을 비워두면 상대 경로로 파일을 참조할 때 오류가 발생할 수 있습니다.
예: C:\Users\사용자명\projects
동작 탭 — 프로그램 경로와 인수 입력 예시
UTF-8 인코딩 문제와 해결 방법
작업 스케줄러로 Python 스크립트를 실행하면 터미널에서 직접 실행할 때와 환경이 다릅니다. Windows 기본 인코딩은 cp949(EUC-KR 계열)라서 한글이 포함된 출력이나 파일 저장 시 글자가 깨지는 경우가 생깁니다.
방법 1 — 스크립트 상단에 환경변수 설정
Python 파일 맨 위에 아래 코드를 추가합니다.
import os
import sys
os.environ["PYTHONIOENCODING"] = "utf-8"
if sys.stdout.encoding != "utf-8":
sys.stdout.reconfigure(encoding="utf-8")
방법 2 — 배치 파일(.bat)로 감싸서 실행
작업 스케줄러에 Python을 직접 등록하는 대신 .bat 파일을 등록하는 방식입니다. .bat 파일 안에서 인코딩 환경변수를 설정하고 Python을 호출합니다.
@echo off
set PYTHONIOENCODING=utf-8
set PYTHONUTF8=1
python "C:\Users\사용자명\projects\collect.py"
pause
이 .bat 파일을 저장한 뒤 작업 스케줄러의 프로그램/스크립트 항목에 .bat 파일 경로를 등록합니다. 인코딩 문제가 반복된다면 이 방법이 더 안정적입니다.
방법 3 — 파일 읽기/쓰기 시 encoding 명시
파일을 열 때 인코딩을 명시적으로 지정하는 것이 가장 근본적인 해결책입니다.
# 읽기
with open("output.txt", "r", encoding="utf-8") as f:
data = f.read()
# 쓰기
with open("output.txt", "w", encoding="utf-8") as f:
f.write(result)
스크립트 전체에서 파일 입출력 시 encoding="utf-8"을 빠뜨리지 않는 것이 좋습니다. 특히 작업 스케줄러 환경에서는 기본값에 의존하면 예상치 못한 위치에서 인코딩 오류가 발생합니다.
배치 파일 — PYTHONIOENCODING 환경변수 설정 예시
자주 발생하는 오류와 원인
설정 후 실행이 안 되거나 오류가 날 때 확인할 항목을 정리합니다.
- ① 스크립트가 실행되지 않음 — Python 경로 오타 또는 가상환경 미반영.
where python으로 경로 재확인. - ② 한글 깨짐 — 인코딩 미설정. 위 방법 1~3 중 하나 적용.
- ③ 파일 참조 오류 — 시작 위치(옵션) 미입력. .py 파일이 있는 폴더 경로를 반드시 입력.
- ④ 가상환경 패키지 인식 안 됨 — 시스템 Python 경로 대신 가상환경 내 python.exe 경로를 사용해야 함.
예:C:\Users\사용자명\projects\venv\Scripts\python.exe
실제로 사용하기 전에 확인할 것
작업 스케줄러는 PC가 켜져 있어야 예약된 시각에 실행됩니다. 절전 모드에서는 실행되지 않을 수 있습니다. 작업 속성의 조건 탭에서 컴퓨터가 AC 전원에 연결된 경우에만 작업 시작 옵션을 해제하면 배터리 환경에서도 실행됩니다.
또한 작업이 실제로 실행됐는지 확인하려면 작업 스케줄러 라이브러리에서 해당 작업을 클릭하고 하단 기록 탭을 확인합니다. 실행 시각과 성공/실패 여부가 기록됩니다. 기록 탭이 비어 있다면 모든 작업 기록 사용을 먼저 활성화해야 합니다.
기록 탭 — 실행 성공 여부 확인
자주 묻는 질문
Q. 가상환경(venv)을 쓰고 있는데 패키지를 못 찾는다고 나옵니다.
작업 스케줄러에 등록한 Python 경로가 시스템 Python을 가리키고 있을 가능성이 높습니다. 가상환경을 활성화한 상태에서 where python을 실행해서 나오는 경로로 교체합니다. 예: 프로젝트폴더\venv\Scripts\python.exe
Q. 로그인하지 않아도 실행되게 할 수 있나요?
작업 속성의 일반 탭에서 사용자가 로그온할 때만 실행 대신 사용자의 로그온 여부에 관계없이 실행을 선택하면 됩니다. 이 경우 Windows 계정 비밀번호 입력이 요구됩니다.
Q. 매일이 아니라 평일에만 실행하고 싶습니다.
트리거 설정에서 매주를 선택하고 월~금 요일만 체크하면 됩니다. 매일 옵션으로는 요일 필터를 적용할 수 없으므로 매주 설정을 사용합니다.
Windows 작업 스케줄러로 Python 자동 실행을 등록하는 것 자체는 어렵지 않습니다. 설정보다 오히려 UTF-8 인코딩 처리를 빠뜨렸을 때 결과물이 망가지는 게 더 골치 아픈 부분입니다. 처음 등록할 때 배치 파일로 감싸서 인코딩을 명시해두면 나중에 다시 들여다볼 일이 줄어듭니다.
📌 관련 글도 읽어보세요
썸네일: Christina @ wocintechchat.com M on Unsplash