Also win32all must be install, but I'm assuming that it is
Jose
James Gardner wrote:
> Hi Jose,
>
> An application like this would be extremely helpful and would be great
> to include in Pylons with a bit of tweaking but I just can't quite get
> it working on my machine. I can successfully update my INI file and then
> install a service without errors but no application appears to actually
> run when I start the installed service, there are no Python applications
> in Task Manager for example. Which port does the application run on? Is
> there a step I'm missing?
>
> Best wishes,
>
> James
>
>
> jose wrote:
>
>> I've been playing around with pylons lately on windows and saw that
>> there
>> is no equivalent to demonize in paste for windows. So after looking
>> around at
>> lots of code I stole and modified some example windows service code
>> from cherrypy. Basically if you put the windowservice.py fine in the
>> same file as your inifile, and run it it will add a new section to the
>> ini file which will allow you to define a windows service, running it
>> again a second time will allow you to install, and run the newly
>> defined service. I'm including the file, hopefully someone else will
>> find it useful, and if anyone has suggestions on how to improve the
>> spaghetti code It would be much appreciated.
>>
>> Jose
>>
>>
>> === WindowsService.py ====
>>
>> """
>> The most basic (working) Windows service possible.
>> Requires Mark Hammond's pywin32 package.
>> Most of the code was taken from a CherryPy 2.2 example of how to set
>> up a service
>> """
>>
>> import win32serviceutil
>> from paste.script.serve import ServeCommand as Server
>> import os, sys
>> import ConfigParser
>>
>> import win32service
>> import win32event
>>
>> class DefaultSettings(object):
>> def __init__(self):
>> os.chdir(os.path.dirname(__file__))
>> # find the ini file
>> self.ini = [x for x in os.listdir('.')
>> if os.path.splitext(x)[1].lower().endswith('ini')]
>> # create a config parser opject and populate it with the ini
>> file
>> c = ConfigParser.SafeConfigParser()
>> c.read(self.ini[0])
>> self.c = c
>>
>> def getDefaults(self):
>> '''
>> Check for and get the default settings
>> '''
>> if (
>> (not self.c.has_section('winservice')) or
>> (not self.c.has_option('winservice', 'service_name')) or
>> (not self.c.has_option('winservice',
>> 'service_display_name')) or
>> (not self.c.has_option('winservice',
>> 'service_description'))
>> ):
>> print 'setting defaults'
>> self.setDefaults()
>> service_name = self.c.get('winservice', 'service_name')
>> service_display_name = self.c.get('winservice',
>> 'service_display_name')
>> service_description = self.c.get('winservice',
>> 'service_description')
>> iniFile = self.ini[0]
>> return service_name, service_display_name, service_description,
>> iniFile
>>
>> def setDefaults(self):
>> '''
>> set and add the default setting to the ini file
>> '''
>> if not self.c.has_section('winservice'):
>> self.c.add_section('winservice')
>> self.c.set('winservice', 'service_name', 'WSCGIService')
>> self.c.set('winservice', 'service_display_name', 'WSCGI windows
>> service')
>> self.c.set('winservice', 'service_description', 'WSCGI windows
>> service')
>> cfg = file(self.ini[0], 'wr')
>> self.c.write(cfg)
>> cfg.close()
>> print '''
>> you must set the winservice section service_name, service_display_name,
>> and service_description options to define the service
>> in the %s file
>> ''' % self.ini[0]
>> sys.exit()
>>
>>
>> class MyService(win32serviceutil.ServiceFramework):
>> """NT Service."""
>>
>> d = DefaultSettings()
>> service_name, service_display_name, service_description, iniFile =
>> d.getDefaults()
>>
>> _svc_name_ = service_name
>> _svc_display_name_ = service_display_name
>> _svc_description_ = service_description
>>
>> def __init__(self, args):
>> win32serviceutil.ServiceFramework.__init__(self, args)
>> # create an event that SvcDoRun can wait on and SvcStop
>> # can set.
>> self.stop_event = win32event.CreateEvent(None, 0, 0, None)
>>
>> def SvcDoRun(self):
>> os.chdir(os.path.dirname(__file__))
>> s = Server(None)
>> s.run([self.iniFile])
>> win32event.WaitForSingleObject(self.stop_event,
>> win32event.INFINITE)
>>
>> def SvcStop(self):
>> self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
>> #cherrypy.server.stop()
>> #win32event.SetEvent(self.stop_event)
>> self.ReportServiceStatus(win32service.SERVICE_STOPPED)
>> sys.exit()
>>
>> if __name__ == '__main__':
>> win32serviceutil.HandleCommandLine(MyService)
>>
>> ==========================================
>>
>>
>>
>>
>>
>
>
> >
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"pylons-discuss" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/pylons-discuss
-~----------~----~----~----~------~----~------~--~---