0

我已经查看并尝试了其他人发布的这个问题的解决方案。一位用户说尝试从以下位置更改我的 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

现在,当我在我的设置脚本中使用“控制台”运行 py2exe 时,它​​工作正常,但服务没有启动并且我收到错误消息。当我在我的设置脚本中使用“服务”运行 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)
4

1 回答 1

2

您是否从最初的问题取得了进展。我在 python 服务中遇到了类似的问题,发现它缺少 DLL,因为“系统路径”(不是用户路径)不完整。

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

于 2013-01-29T10:11:22.557 回答