Help needed with Windows Service in Python
ekozlowski1 at gmail.com
Thu Sep 2 21:55:19 CEST 2010
On Sep 2, 2:38 pm, Ian <hobso... at gmaiil.com> wrote:
> On 02/09/2010 20:06, Edward Kozlowski wrote:
> > On Sep 2, 10:22 am, Ian Hobson<i... at ianhobson.co.uk> wrote:
> >> Hi All,
> >> I am attempting to create a Windows Service in Python.
> >> I have the framework (from Mark Hammond and Andy Robinason's book)
> >> running - see below. It starts fine - but it will not stop. :(
> >> net stop "Python Service"
> >> and using the services GUI both leave the services showing it as "stopping"
> >> I guess this means SvcStop is called but it is not enough to get it out
> >> of the machine.
> >> Does anyone know why not?
> >> Python 2.7 with win32 extensions, sunning on Windows 7.
> >> Many thanks
> >> Ian
> >> the (complete) source code is
> >> #!/usr/bin/env python
> >> # coding=utf8
> >> # service.py = testing services and Named pipes
> >> #
> >> import win32serviceutil
> >> import win32service
> >> import win32event
> >> class PythonService(win32serviceutil.ServiceFramework):
> >> _svc_name_ = "Python Service"
> >> _svc_display_name_ = "Test Service in Python"
> >> def __init__(self, args):
> >> win32serviceutil.ServiceFramework.__init__(self,args)
> >> self.hWaitStop = win32event.CreateEvent(None,0,0,None)
> >> def SvcStop(self):
> >> self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
> >> wind32event.SetEvent(self.hWaitStop)
> >> def SvcDoRun(self):
> >> win32event.WaitForSingleObject(self.hWaitStop,win32event.INFINITE)
> >> if __name__ == '__main__':
> >> win32serviceutil.HandleCommandLine(PythonService)
> > Looks to me like there may be a typo in your code.
> > You probably meant win32event.SetEvent(self.hWaitStop), not
> > wind32event.
> > Regards,
> > -Edward Kozlowski
> A huge big thank you Edward. That was the problem.
You're most welcome.
If you're looking at running services in Windows using Python, one
other hangup I ran into was that my services would freeze for no
reason. At Pycon '09, I learned that there were buffers for stdout
and stderr that were filling. I wish I could remember who gave the
talk that included the jewel of knowledge, because I'd love to give
credit where it's due...
After I redirected stdout and stderr to files, my problems with the
services freezing went away.
More information about the Python-list