# -*- coding: utf-8 -*-
#! /usr/bin/env python
from VideoCapture import Device
import datetime, os
import win32serviceutil
import win32service
import win32event
import servicemanager
camers = 2
director = "F:\\cam\\"
start = 1
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "web_cam_Service"
_svc_display_name_ = "web_cam_Service"
_svc_description_ = "web_cam_Service"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
self.hWaitResume = win32event.CreateEvent(None, 0, 0, None)
self.timeout = 10 #Пауза между выполнением основного цикла службы в миллисекундах
self.resumeTimeout = 10
self._paused = False
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STOPPED,
(self._svc_name_, ''))
def SvcPause(self):
self.ReportServiceStatus(win32service.SERVICE_PAUSE_PENDING)
self._paused = True
self.ReportServiceStatus(win32service.SERVICE_PAUSED)
servicemanager.LogInfoMsg("The %s service has paused." % (self._svc_name_, ))
def SvcContinue(self):
self.ReportServiceStatus(win32service.SERVICE_CONTINUE_PENDING)
win32event.SetEvent(self.hWaitResume)
self.ReportServiceStatus(win32service.SERVICE_RUNNING)
servicemanager.LogInfoMsg("The %s service has resumed." % (self._svc_name_, ))
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
#В этом методе реализовываем нашу службу
def main(self):
#Здесь выполняем необходимые действия при старте службы
servicemanager.LogInfoMsg("Hello! I'm a web_cam Service.")
while True:
#Здесь должен находиться основной код сервиса
servicemanager.LogInfoMsg("I'm still here.")
##############################
try:
os.makedirs(director + str(datetime.datetime.now().strftime("%d%B%Y")))
except OSError:
pass
#####
####
for i in xrange(camers):
cam = Device(devnum=i)
cam.setResolution(1024, 768)
cam.saveSnapshot(director + str(datetime.datetime.now().strftime("%d%B%Y")) + "\\" + "cam" + str(i) + "-" + str(datetime.datetime.now().strftime("%H-%M-%S")) + '.jpg')
##############################
#Проверяем не поступила ли команда завершения работы службы
rc = win32event.WaitForSingleObject(self.hWaitStop, self.timeout)
if rc == win32event.WAIT_OBJECT_0:
#Здесь выполняем необходимые действия при остановке службы
servicemanager.LogInfoMsg("Bye!")
break
#Здесь выполняем необходимые действия при приостановке службы
if self._paused:
servicemanager.LogInfoMsg("I'm paused... Keep waiting...")
#Приостановка работы службы
while self._paused:
#Проверям не поступила ли команда возобновления работы службы
rc = win32event.WaitForSingleObject(self.hWaitResume, self.resumeTimeout)
if rc == win32event.WAIT_OBJECT_0:
self._paused = False
#Здесь выполняем необходимые действия при возобновлении работы службы
servicemanager.LogInfoMsg("Yeah! Let's continue!")
break
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
запись в сервис не помогло