2017-06-20 4 views
0

私のPythonアプリケーションをWindowsサービスとして実行する必要があります。 私は、使用してコマンドがあることを行うことができるよpython fservice.py install
python fservice.py start


今、私はpy2exeを使って私のアプリのためのexeファイルを作成します。 私はこの質問からコード続いてきました:私は、
python setup.py py2exeをコマンドを使用してexeファイルを作成していlink

setup.pypy2exeを使用してWindowsサービスを作成する

from distutils.core import setup 
import py2exe 
import sys 


if len(sys.argv) == 1: 
    sys.argv.append("py2exe") 
    sys.argv.append("-q") 


class Target: 
    def __init__(self, **kw): 
     self.__dict__.update(kw) 
     # for the versioninfo resources 
     self.version = "0.0.1" 
     self.company_name = "flotomate" 
     self.copyright = "no copyright" 
     self.name = "flotomate" 

myservice = Target(
    # used for the versioninfo resource 
    description = "flotomate", 
    # what to build. For a service, the module name (not the 
    # filename) must be specified! 
    modules = ["fservice"] 
    ) 

setup(
    service = [myservice] 
    ) 


fservice.py

import sys 

import servicemanager 
import win32serviceutil 
import win32service 
import win32event 
import win32api 
from pagent import app 


class fservice(win32serviceutil.ServiceFramework): 
    _svc_name_ = 'flotomate' #here is now the name you would input as an arg for instart 
    _svc_display_name_ = 'flotomate' #arg for instart 
    _svc_description_ = 'flotomate'# arg from instart 

    def __init__(self, *args): 
     win32serviceutil.ServiceFramework.__init__(self, *args) 
     self.log('init') 
     self.stop_event = win32event.CreateEvent(None, 0, 0, None) 


     #logs into the system event log 
    def log(self, msg): 
     import servicemanager 
     servicemanager.LogInfoMsg(str(msg)) 

    def sleep(self, minute): 
      win32api.Sleep((minute*1000), True) 

    def SvcDoRun(self): 
     self.ReportServiceStatus(win32service.SERVICE_START_PENDING) 
     try: 
      self.ReportServiceStatus(win32service.SERVICE_RUNNING) 
      self.log('start') 
      self.start() 
      self.log('wait') 
      win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE) 
      self.log('done') 
     except Exception: 
      self.SvcStop() 

    def SvcStop(self): 
     self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) 
     self.stop() 
     win32event.SetEvent(self.stop_event) 
     self.ReportServiceStatus(win32service.SERVICE_STOPPED) 

    def start(self): 
     app.run(host='0.0.0.0',port=4999) 

    # to be overridden 
    def stop(self): 
     pass 


if __name__ == '__main__': 
    if len(sys.argv) == 1: 
     servicemanager.Initialize() 
     servicemanager.PrepareToHostSingle(fservice) 
     servicemanager.StartServiceCtrlDispatcher() 
    else: 
     win32serviceutil.HandleCommandLine(fservice) 



しかし、私がインストールしようとすると
fservice.exe --install

を利用したサービスは、私が

Traceback (most recent call last): 
    File "boot_service.py", line 37, in <module> 
AttributeError: 'module' object has no attribute 'Initialize 


boot_service.py of py2exe
このエラーを取得する私は、私は同じ問題に遭遇したのPython 2.7.6とpy2exe-0.6.9

答えて

-1

を使用しています。あなたがまだ解決策を見つけたかどうかわかりません

私の場合、サービスマンは、コンパイルされたパッケージに含まれていません。それはインストールされたservicemanagerライブラリは、Pythonで競合する問題が発生します。それが未使用であるか、または手動distの\ library.zipdistのとservicemager.pycをフォルダにservicemanager.pydをコピーする場合

は、この問題を解決するために、私は servicemanagerをアンインストールします。 servicemanagerという名前のフォルダが dist \ library.zipにある場合は、削除してください。

すでに解決策がありましたら、それを共有してください。^^

関連する問題