Python 스크립트를 다 만들어놓고도 매일 직접 실행하고 있다면, 작업 스케줄러 설정이 빠진 겁니다. Windows에 기본 탑재된 Windows Task Scheduler(작업 스케줄러)를 이용하면 Python 자동 실행을 OS 수준에서 처리할 수 있습니다. 별도 소프트웨어 설치 없이, 한 번 등록해두면 PC가 켜져 있는 한 매일 정해진 시간에 스크립트가 알아서 돌아갑니다.
단, 그냥 등록만 해서는 안 됩니다. 작업 디렉터리 설정을 빠뜨리거나 Python 경로를 잘못 입력하면 실행 자체가 안 되고, 한글이 포함된 스크립트는 UTF-8 인코딩 문제로 로그가 깨지거나 오류가 발생합니다. 이 글에서는 등록 방법부터 자주 막히는 지점까지 순서대로 정리합니다.
Windows 작업 스케줄러에서 Python 자동 실행을 설정하는 기본 구조

작업 스케줄러는 Windows에 기본 내장된 자동화 도구입니다. 특정 시간, 특정 이벤트(로그인, 부팅 등)에 맞춰 프로그램을 실행시킬 수 있습니다. Python 스크립트를 등록할 때는 세 가지 요소를 정확히 입력해야 합니다.
- 프로그램/스크립트: Python 실행 파일 전체 경로
- 인수 추가: 실행할 .py 파일 전체 경로
- 시작 위치: 스크립트가 위치한 폴더 경로
이 세 항목 중 하나라도 누락되면 작업이 등록은 되지만 실행되지 않거나, 파일을 찾지 못했다는 오류가 발생합니다. 특히 시작 위치를 비워두는 경우가 많은데, 스크립트 내부에서 상대 경로로 파일을 참조하는 경우 반드시 입력해야 합니다.
단계별 등록 방법 — 매일 오전 9시 실행 기준
아래 순서대로 진행합니다. Windows 10, 11 기준이며 관리자 권한이 필요할 수 있습니다.
1단계. 작업 스케줄러 실행
Windows 검색창에 작업 스케줄러 또는 Task Scheduler를 입력해 실행합니다. 또는 실행창(Win+R)에서 taskschd.msc를 입력해도 됩니다.
2단계. 기본 작업 만들기
오른쪽 패널에서 기본 작업 만들기를 클릭합니다. 작업 이름과 설명을 입력하고 다음으로 넘어갑니다.
3단계. 트리거 설정 — 매일 09:00
트리거 항목에서 매일을 선택하고, 시작 시간을 오전 9:00:00으로 설정합니다. 반복 간격은 1일로 고정합니다.
4단계. 동작 설정 — Python 경로 입력
동작 항목에서 프로그램 시작을 선택하고 아래와 같이 입력합니다.
| 항목 | 입력값 예시 | 설명 |
|---|---|---|
| 프로그램/스크립트 | C:\Users\사용자명\AppData\Local\Programs\Python\Python311\python.exe |
Python 실행 파일 전체 경로. where python으로 확인 가능 |
| 인수 추가 | C:\Users\사용자명\scripts\daily_run.py |
실행할 스크립트 전체 경로 |
| 시작 위치 | C:\Users\사용자명\scripts\ |
스크립트가 있는 폴더. 상대 경로 참조 시 반드시 입력 |
Python 경로가 불확실하다면 명령 프롬프트(cmd)에서 where python을 실행하면 정확한 경로가 출력됩니다.
5단계. 마침 후 속성 확인
작업이 등록되면 작업 목록에서 해당 작업을 찾아 우클릭 → 속성으로 진입합니다. 조건 탭에서 컴퓨터의 AC 전원이 연결된 경우에만 작업 시작 옵션이 체크돼 있으면, 노트북 배터리 상태에 따라 실행이 건너뛰어질 수 있습니다. 필요에 따라 해제합니다.
UTF-8 인코딩 문제 — 한글 스크립트에서 자주 막히는 지점
Windows의 기본 인코딩은 CP949(EUC-KR)입니다. 작업 스케줄러로 실행된 Python 스크립트가 한글 출력, 파일 읽기, 로그 저장 등을 처리할 때 인코딩이 맞지 않으면 오류가 발생하거나 로그 파일이 깨집니다.
해결 방법은 두 가지입니다.
방법 1. 스크립트 상단에 인코딩 선언 추가
파일 첫 줄 또는 두 번째 줄에 아래 주석을 추가합니다.
# -*- coding: utf-8 -*-
Python 3에서는 기본 인코딩이 UTF-8이지만, 환경에 따라 명시적으로 선언하는 것이 안전합니다.
방법 2. 환경 변수로 Python 기본 인코딩 강제 설정
작업 스케줄러는 사용자 환경 변수를 일부 불러오지 못하는 경우가 있습니다. 이때는 스크립트 실행 전에 환경 변수를 직접 지정하는 배치 파일(.bat)을 거쳐 실행하는 방식이 효과적입니다.
@echo off
set PYTHONUTF8=1
python C:\Users\사용자명\scripts\daily_run.py
PYTHONUTF8=1은 Python 3.7 이상에서 지원하는 환경 변수로, 이 값을 1로 설정하면 입출력 전체를 UTF-8로 처리합니다. 작업 스케줄러의 프로그램/스크립트에는 python.exe 대신 이 .bat 파일 경로를 입력합니다.
| 방법 | 적용 대상 | 효과 |
|---|---|---|
# -*- coding: utf-8 -*- |
소스 파일 자체 | 파일 내 한글 문자열 처리 보장 |
PYTHONUTF8=1 환경 변수 |
실행 환경 전체 | stdin/stdout/stderr 포함 전체 인코딩 UTF-8 고정 |
| .bat 파일 경유 실행 | 작업 스케줄러 실행 흐름 | 환경 변수 미적용 문제 우회 |
자주 발생하는 오류와 해결 방법
등록 후 실행이 안 될 때 막히는 지점은 대부분 아래 네 가지입니다.
① 오류 코드 0x1 — 스크립트 실행 실패
원인: Python 경로 또는 스크립트 경로 오류. 경로에 공백이 포함된 경우 따옴표 없이 입력하면 인식 실패.
해결: 경로 전체를 큰따옴표로 감쌉니다. 예: "C:\Users\사용자 이름\scripts\daily_run.py"
② 가상환경(venv) 사용 시 모듈 찾기 실패
원인: 작업 스케줄러가 기본 Python을 실행해 가상환경 패키지를 불러오지 못함.
해결: 프로그램/스크립트에 시스템 python.exe가 아닌 가상환경 내 python.exe 경로를 입력합니다. 예: C:\project\venv\Scripts\python.exe
③ 로그 파일에 한글이 ???로 출력됨
원인: 출력 스트림 인코딩이 CP949로 처리됨.
해결: PYTHONUTF8=1 환경 변수 설정 또는 스크립트 내 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 추가.
④ 작업이 트리거 시간에 실행되지 않음
원인: 조건 탭의 전원 옵션 또는 ‘사용자가 로그온한 경우에만 실행’ 설정이 체크됨.
해결: 속성 → 일반 탭에서 사용자 로그온 여부에 관계없이 실행을 선택하고, 조건 탭에서 전원 조건을 해제합니다.
등록 후 정상 작동 여부 확인하는 방법
작업을 등록한 뒤 다음 날 09시까지 기다리지 않아도 됩니다. 작업 스케줄러 목록에서 해당 작업을 우클릭 → 실행을 선택하면 즉시 테스트 실행이 가능합니다.
실행 후 마지막 실행 결과 열에서 상태 코드를 확인합니다.
0x0— 정상 완료0x1— 스크립트 내부 오류 또는 경로 문제0x41301— 현재 실행 중0x41303— 아직 실행되지 않음
스크립트 내부에 실행 시간과 결과를 기록하는 로그 파일을 만들어두면 나중에 문제가 생겼을 때 원인 파악이 쉬워집니다. 기본 구조는 아래와 같습니다.
import logging
logging.basicConfig(
filename='C:\\Users\\사용자명\\scripts\\run_log.txt',
level=logging.INFO,
encoding='utf-8',
format='%(asctime)s - %(message)s'
)
logging.info('스크립트 실행 완료')
자주 묻는 질문
Q. PC가 꺼져 있으면 예약된 작업이 실행되지 않나요?
Windows 작업 스케줄러는 OS 기반이므로 PC가 꺼져 있거나 절전 상태일 때는 실행되지 않습니다. 서버나 클라우드 환경에서 24시간 실행이 필요한 경우에는 AWS Lambda, GitHub Actions 등의 외부 스케줄링 도구가 더 적합합니다.
Q. 가상환경을 쓰는 경우에는 어떻게 해야 하나요?
프로그램/스크립트 경로에 시스템 Python이 아닌 가상환경 내 python.exe 경로를 입력합니다. 예: C:\project\venv\Scripts\python.exe. 이렇게 하면 해당 가상환경에 설치된 패키지가 정상적으로 불러와집니다.
Q. 매일이 아니라 특정 요일에만 실행하려면 어떻게 하나요?
트리거 설정에서 매주를 선택하고 원하는 요일에만 체크하면 됩니다. 요일 선택과 실행 시간 모두 자유롭게 지정할 수 있습니다.
설정 자체는 어렵지 않습니다. 경로 하나 잘못 입력하거나 인코딩 설정을 빠뜨려서 안 되는 경우가 대부분입니다. 이 글에 정리된 항목들을 순서대로 확인하면 대부분의 문제는 해결됩니다.
썸네일: Hitesh Choudhary on Unsplash