python - एक अजगर win32 सेवा बनाना




winapi pywin32 (2)

मैंने इन एपीआई का कभी इस्तेमाल नहीं किया है, लेकिन कोड के माध्यम से खुदाई करते हुए ऐसा लगता है कि रजिस्ट्री में क्लास के नाम को पंजीकृत करने के लिए प्रयोग किया जाता है, तो आप अपने खुद के किसी भी प्रारंभिक कार्य नहीं कर सकते। लेकिन GetServiceCustomOption नामक एक विधि है जो मदद कर सकता है:

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

https://code.i-harness.com

मैं वर्तमान में pywin32 का उपयोग कर एक win32 सेवा बनाने की कोशिश कर रहा हूँ। मेरा मुख्य संदर्भ इस ट्यूटोरियल है:

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

जो मुझे समझ में नहीं आता है वह प्रारंभिक प्रक्रिया है, चूंकि डीमन को सीधे डेमॉन () द्वारा कभी भी प्रारंभ नहीं किया जाता है, इसके बजाय मेरी यह निम्न के द्वारा आरंभिक समझने के बजाय:

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

जहां svc_install , डायनेम को कॉल करके, निजीकरण को संभालता है init () और कुछ तर्कों को पारित करने के लिए।

लेकिन सेवा को बिना किसी दिक्कत के, मैं कैसे डेमॉन ऑब्जेक्ट को आरंभ कर सकता हूं? मैं कुछ चीजें करना चाहता हूँ, इससे पहले कि मैं सेवा init। क्या किसी के पास कोई विचार है?

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__)

मैं सिर्फ एक सरल "कैसे" प्रोग्राम बनाऊँ जहां प्रोग्राम एक मॉड्यूल में है और सेवा दूसरी जगह पर है, यह win32 सेवा बनाने के लिए py2exe का उपयोग करती है, जो मुझे विश्वास है कि आप अपने उपयोगकर्ताओं के लिए ऐसा कर सकते हैं जो आप नहीं चाहते हैं अजगर दुभाषिया या अन्य निर्भरताओं के साथ गड़बड़ करने के लिए

आप अपना ट्यूटोरियल यहां देख सकते हैं: पायथन और पीवाय 2 एक्सएक्स के जरिए विनोवर सेवा बनाएं





pywin32