Verfasst: Freitag 11. November 2005, 19:17
XML-RPC Unterstützt keine Objekte. Dazu müsstest du, wie Diez geschrieben hat eher auf CORBA (wahnsinnig umständlich) oder Pyro zurückgreifen. Vielleicht noch Ice.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
myfile.exe -install -auto
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import win32serviceutil
import win32service
import win32event
import win32evtlogutil
class IwanService(win32serviceutil.ServiceFramework):
_svc_name_ = "IwanService"
_svc_display_name_ = "IWAN Server"
_svc_deps_ = ["EventLog"]
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)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
import servicemanager
# Write a 'started' event to the event log...
win32evtlogutil.ReportEvent(self._svc_name_,
servicemanager.PYS_SERVICE_STARTED,
0, # category
servicemanager.EVENTLOG_INFORMATION_TYPE,
(self._svc_name_, ''))
# wait for being stopped...
win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
# and write a 'stopped' event to the event log.
win32evtlogutil.ReportEvent(self._svc_name_,
servicemanager.PYS_SERVICE_STOPPED,
0, # category
servicemanager.EVENTLOG_INFORMATION_TYPE,
(self._svc_name_, ''))
# ---------- xmlrpc server ---------- BEGIN
import xmlrpcserver
# settings
port = 8080
# create stoppable server
class StoppableXmlRpcServer(xmlrpcserver.XmlRpcHTTPServer):
# override serve_forever() method with stop-signal
def serve_forever(self):
self.stop = False
while not self.stop:
self.handle_request()
# function to stop XMLRPC server
def stop(meta):
server.stop = True
# test class
class testc:
def testm(self, meta, *args):
return str(meta)+' '+str(args)
def testfault(self, meta):
raise xmlrpclib.Fault(42, "don't panic.")
def testexception(self, meta):
raise ValueError
# instance of the test class
c = testc()
# test method
def testm (meta, *args):
return str(meta)+' '+str(args)
# start bootup sequence
print 'Booting:'
print ' - Creating a XML-RPC server on port %s' % port
server = StoppableXmlRpcServer(('localhost', port))
print ' - Registering methods and classes'
server.register_class('testc', c)
server.register('testm', testm)
server.register('stop', stop)
print ' - Serving: Booting done.'
server.serve_forever()
# ---------- xmlrpc server ---------- END
if __name__ == '__main__':
# Note that this code will not be run in the 'frozen' exe-file!!!
win32serviceutil.HandleCommandLine(IwanService)
Code: Alles auswählen
def onServiceStart():
meinSkript
def onServiceStop():
meinSkript
def onServiceRun():
meinSkript