启动以Python编写的窗口服务时出现错误1053

时间:2012-05-11 18:26:53

标签: windows service python-2.7

我已经查看并尝试了其他人发布的这个问题的解决方案。一位用户说要尝试从以下位置更改我的setup.py文件:

from distutils.core import setup
import py2exe

setup(console=["dev.py"])

from distutils.core import setup
import py2exe

setup(service=["dev.py"])

我得到了以下结果:

running py2exe
*** searching for required modules ***
Traceback (most recent call last):
  File "C:\Python27\Scripts\distutils-setup.py", line 5, in <module>
  setup(service=["C:\Python27\Scripts\dev.py"])
File "C:\Python27\lib\distutils\core.py", line 152, in setup
  dist.run_commands()
File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
  self.run_command(cmd)
File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
  cmd_obj.run()
File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 243, in run
  self._run()
File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 296, in _run
  self.find_needed_modules(mf, required_files, required_modules)
File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 1274, in
find_needed_modules
  mf.import_hook(mod)
File "C:\Python27\lib\site-packages\py2exe\mf.py", line 719, in import_hook
  return Base.import_hook(self,name,caller,fromlist,level)
File "C:\Python27\lib\site-packages\py2exe\mf.py", line 136, in import_hook
  q, tail = self.find_head_package(parent, name)
File "C:\Python27\lib\site-packages\py2exe\mf.py", line 204, in find_head_package
  raise ImportError, "No module named " + qname
ImportError: No module named dev

现在,当我在我的安装脚本中使用“console”运行py2exe时,它工作正常,但服务无法启动,我收到错误。当我在我的安装脚本中使用“service”运行py2exe时,py2exe没有运行并且告诉我它找不到我的模块。

我试图将py2exe重新安装到无法解析。我也试图改变:

def SvcDoRun(self):
    servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                          servicemanager.PYS_SERVICE_STARTED,
                          (self._svc_name_,''))

def  SvcDoRun(self):
     self.ReportServiceStatus(win32service.SERVICE_RUNNING)
     win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)

也没有任何区别。能帮到我吗?这是我正在做的事情。它监视服务器并每60秒发回一个文本文件,我用它来监视我的服务器在任何给定的分钟。你和男孩们给予的任何帮助都会很棒。

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import wmi
import _winreg
from time import sleep
import os

class SrvMonSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "SrvMonSvc"
_svc_display_name_ = "Server Monitor"

def __init__(self,args):
    win32serviceutil.ServiceFramework.__init__(self,args)
    self.hWaitStop = win32event.CreateEvent(None,0,0,None)
    socket.setdefaulttimeout(60)

def SvcStop(self):
    self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    win32event.SetEvent(self.hWaitStop)

def SvcDoRun(self):
    servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                          servicemanager.PYS_SERVICE_STARTED,
                          (self._svc_name_,''))
    self.main()

def main(self):
    host = wmi.WMI(namespace="root/default").StdRegProv
    try:
        result, api = host.GetStringValue(
        hDefKey = _winreg.HKEY_LOCAL_MACHINE,
        sSubKeyName = "SOFTWARE\Server Monitor",
        sValueName = "API")
        if api == None:
            raise Exception
        else:
            pass
    except:
        exit()

    while 1 == 1:
        with open("C:/test.txt", "wb") as b:
            computer = wmi.WMI(computer="exsan100")
            for disk in computer.Win32_LogicalDisk (DriveType=3):
                name = disk.caption
                size = round(float(disk.Size)/1073741824, 2)
                free = round(float(disk.FreeSpace)/1073741824, 2)
                used = round(float(size), 2) - round(float(free), 2)
                for mem in computer.Win32_OperatingSystem():
                    a_mem = (int(mem.FreePhysicalMemory)/1024)
                for me in computer.Win32_ComputerSystem():
                    t_mem = (int(me.TotalPhysicalMemory)/1048576)
                    u_mem = t_mem - a_mem
                for cpu in computer.Win32_Processor():
                    load = cpu.LoadPercentage
                print >>b, api
                print >>b, name
                print >>b, size
                print >>b, used
                print >>b, t_mem
                print >>b, u_mem
                print >>b, load
        b.close()
        date_list = []
        stamp = time.strftime("%c",time.localtime(time.time()))
        date_list.append(stamp)
        name = re.sub(r"[^\w\s]", "",date_list[0])
        os.rename("C:/test.txt", ("C:/%s.txt" % name))

        try:
            sleep(60.00)
        except:
            exit()

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(SrvMonSvc)

1 个答案:

答案 0 :(得分:1)

你是否已从原来的问题中取得进展。我有一个类似python服务的问题,发现它缺少DLL,因为'系统路径'(不是用户路径)不完整。

使用-debug从命令提示符运行pythonservice.exe不是问题,因为它使用了正确的PATH环境变量,但如果您的服务作为系统服务安装,则值得检查系统路径变量是否具有所有路径所需的DLL(MSVC,Python,System32)。对我来说,它缺少python DLLs路径,之后再次工作。