start para mac instalar gratis descargar python winapi pywin32

python - para - start mongodb mac



Crear un servicio python win32 (2)

Nunca utilicé estas API, pero al explorar el código, parece que la clase que se pasó se usa para registrar el nombre de la clase en el registro, por lo que no puede hacer ninguna inicialización propia. Pero hay un método llamado GetServiceCustomOption que puede ayudar:

http://mail.python.org/pipermail/python-win32/2006-April/004518.html

Actualmente estoy tratando de crear un servicio win32 usando pywin32. Mi principal punto de referencia ha sido este tutorial:

http://code.activestate.com/recipes/551780/

Lo que no entiendo es el proceso de inicialización, ya que Daemon nunca se inicializa directamente por Daemon (), sino que, en mi opinión, se inicializa con lo siguiente:

mydaemon = Daemon __svc_regClass__(mydaemon, "foo", "foo display", "foo description") __svc_install__(mydaemon)

Donde svc_install , maneja la inicialización, llamando a Daemon. init () y pasandole algunos argumentos.

Pero, ¿cómo puedo inicializar el objeto daemon sin inicializar el servicio? Quiero hacer algunas cosas antes de iniciar el servicio. ¿Alguien tiene alguna idea?

class Daemon(win32serviceutil.ServiceFramework): def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcDoRun(self): self.run() def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def start(self): pass def stop(self): self.SvcStop() def run(self): pass def __svc_install__(cls): win32api.SetConsoleCtrlHandler(lambda x: True, True) try: win32serviceutil.InstallService( cls._svc_reg_class_, cls._svc_name_, cls._svc_display_name_, startType = win32service.SERVICE_AUTO_START ) print "Installed" except Exception, err: print str(err) def __svc_regClass__(cls, name, display_name, description): #Bind the values to the service name cls._svc_name_ = name cls._svc_display_name_ = display_name cls._svc_description_ = description try: module_path = sys.modules[cls.__module__].__file__ except AttributeError: from sys import executable module_path = executable module_file = os.path.splitext(os.path.abspath(module_path))[0] cls._svc_reg_class_ = ''%s.%s'' % (module_file, cls.__name__)


Simplemente creo un "cómo hacerlo" simple donde el programa está en un módulo y el servicio está en otro lugar, usa py2exe para crear el servicio win32, que creo que es lo mejor que puedes hacer por tus usuarios que no quieren meterse con el intérprete de python u otras dependencias.

Puede consultar mi tutorial aquí: Crear servicios win32 utilizando Python y py2exe