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
-~----------~----~----~----~------~----~------~--~---

Reply via email to