Help needed with Windows Service in Python

Ian hobson42 at gmaiil.com
Fri Sep 3 17:31:45 EDT 2010


  On 02/09/2010 20:55, Edward Kozlowski wrote:
> 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.
>>
>> Regards
>>
>> Ian
> 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.
>
> Regards,
> -Edward Kozlowski
Hi Edward,

Thanks for the heads up. That is really worth knowing.

Ian





More information about the Python-list mailing list