본문 바로가기

일상

파이썬에서 윈도우 토스트 알림 보내기 (설치 없이 PowerShell로, 한글 깨짐 해결까지)

반응형

긴 배치나 모니터링 스크립트가 끝났는데 터미널을 안 보고 있어서 놓칠 때, 별도 라이브러리 설치 없이 윈도우 기본 토스트 알림을 파이썬에서 띄우는 방법입니다.


1. 문제: 작업이 끝나도 화면을 안 보면 모른다
밤새 도는 전사 배치, 몇 분마다 폴링하는 모니터, 오래 걸리는 크롤링 같은 걸 돌려두면, 정작 끝났거나 이상이 생겼을 때 터미널을 안 보고 있으면 놓칩니다. 완료·임계 도달·에러 같은 순간에 화면 오른쪽 아래로 알림 하나만 떠도 훨씬 편합니다.


- 배치 완료를 한참 뒤에야 확인
- 임계 도달·에러를 실시간으로 못 챙김
- 계속 터미널을 들여다볼 수도 없음


2. 해결: 윈도우 기본 토스트를 파이썬에서 띄운다
윈도우에는 우리가 늘 보는 그 알림(토스트)을 띄우는 API가 내장돼 있습니다. PowerShell로 Windows.UI.Notifications를 호출하면 되고, 파이썬에서는 그 PowerShell 한 줄을 subprocess로 실행하면 됩니다. pip 설치가 필요 없어서, 배포 환경이 제한적이거나 의존성을 늘리기 싫을 때 특히 좋습니다.



- 윈도우 기본 알림이라 추가 설치 없음
- 텍스트 2줄 템플릿(ToastText02)이면 제목+본문으로 충분
- 파이썬에서는 subprocess로 PowerShell만 실행


3. 함정 1: 한글·특수문자가 깨진다
가장 많이 막히는 지점입니다. 알림 문구를 PowerShell 명령 문자열 안에 그대로 박아 넣으면, 한글이 깨지거나 따옴표가 꼬여서 실행이 실패합니다. 명령을 조립하는 과정에서 인코딩과 따옴표 이스케이프가 어긋나기 때문입니다. 해결은 간단합니다. 문구를 명령에 직접 넣지 말고 환경변수로 넘긴 다음, PowerShell에서 $env:로 읽게 하는 겁니다. 값이 명령 문자열을 거치지 않으니 깨질 일이 없습니다.



- 명령에 한글을 직접 넣으면 인코딩·따옴표에서 깨짐
- 값은 환경변수로 넘기고 PowerShell은 $env:로 읽음
- 명령 문자열은 고정, 바뀌는 값만 밖에서 주입


4. 함정 2: 알림 실패가 본 작업을 멈추면 안 된다
알림은 어디까지나 부가 기능입니다. PowerShell 실행이 어쩌다 실패하거나 멈춰도, 정작 중요한 본 작업(배치·모니터)은 계속 돌아야 합니다. 그래서 subprocess 호출을 try/except로 감싸 실패를 삼키고, timeout을 걸어 알림이 멈춰도 본 흐름이 막히지 않게 합니다. -NoProfile을 붙이면 프로필 로딩을 건너뛰어 더 빠르고 예측 가능하게 뜹니다.



- try/except로 알림 실패를 삼킴(본 작업 보호)
- timeout으로 알림이 멈춰도 본 흐름 안 막힘
- -NoProfile로 빠르고 예측 가능하게 실행


5. 활용: 완료·임계·에러 순간에 호출
이 토스트 함수 하나를 만들어 두면 여기저기 붙이기 좋습니다. 배치가 끝날 때 "OO건 완료", 모니터가 임계에 닿을 때 "사용량 임박", 예외가 날 때 "에러 발생"처럼 상태가 바뀌는 순간에만 호출하면 됩니다. 매 순간이 아니라 상태 변화 때만 띄우는 게 요령입니다. 안 그러면 알림이 쏟아져서 오히려 안 보게 됩니다.


- 배치 완료 / 임계 도달 / 에러 발생 등 상태 변화 시에만
- 매 폴링마다가 아니라 "바뀌는 순간"에만 호출
- 무인 배치·모니터에 한 줄로 끼워넣기


6. 정리
긴 작업의 끝이나 이상을 놓치지 않으려면, 윈도우 기본 토스트를 파이썬에서 띄우는 게 가장 가볍습니다. 설치 없이 PowerShell을 subprocess로 부르고, 한글은 환경변수로 넘겨 깨짐을 피하고, 알림 실패가 본 작업을 멈추지 않게 감싸면 됩니다. 상태가 바뀌는 순간에만 조용히 하나 띄우는 것 - 그거면 충분합니다.


- 화면 안 봐도 완료·이상 파악 -> 윈도우 기본 토스트
- 한글 깨짐 -> 문구는 환경변수로, $env:로 읽기
- 알림은 부가기능 -> try/except + timeout으로 본 작업 보호


함께 보면 좋은 글:
- 수백 개 음성 파일을 밤새 무인으로 STT 돌리기 (멱등 재개 배치) - 배치 끝나면 알림 띄우기 편
- 밤새 돌리는 클로드(Claude) 자동화, 사용량 한도에 걸려 죽지 않게 (외부 모니터 + 게이트 파일 설계) - 임계 도달 시 알림 편


여기까지 파이썬에서 설치 없이 윈도우 토스트 알림을 띄우고, 한글 깨짐과 실패 처리까지 잡는 방법에 대해서 작성해봤습니다. 여기까지 읽어주셔서 감사합니다!

반응형