win32serviceutil.ServiceFramework를 상속받아서 SvcStop(), SvcDoRun() 을 override 하면 가장 기본적인 서비스를 구현할 수 있다. 아래의 예제는 Python Programming on Win32 에서 발췌한 것이다.
!python
import win32serviceutil, win32service, win32event class MyService(win32serviceutil.ServiceFramework): svc_name = “MyService” svc_display_name = “My First Service” def init(self,args): win32serviceutil.ServiceFramework.init(self,args) self.event = win32event.CreateEvent(None,0,0,None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.event) def SvcDoRun(self): win32event.WaitForSingleObject(self.event,win32event.INFINITE)
if name==’main’: win32serviceutil.HandleCommandLine(MyService)
이렇듯 간단한 서비스를 실행하기 위해서는 우선 Win32 Python 모듈과 함께 배포되는 PythonService.exe를 레지스트리에 등록해야 한다. 다음과 같이 하라. (그런데, 아마도 win32 모듈을 설치하면 자동으로 이 넘이 등록되는 듯하다. 확인 요망)
PythonService.exe /register
이제 서비스를 실행해보자. win32serviceutil.HandleCommandLine()이 이미 모든 것을 구현해뒀기 때문에, 그냥 다음과 같이 하면 된다.
python MyService.py install | start | stop | remove
물론 net start | stop MyService 라고 해도 서비스를 시작/종료할 수 있다.