python-win32 python Exe未在Windows 2003上运行

python-win32 python Exe未在Windows 2003上运行,python,Python,我已经编写了Python脚本,用于获取CPU使用率、RAM和 Windows服务器的磁盘使用情况 然后我通过将脚本转换为.exe以在服务器上执行 .exe在windows 2008服务器上运行正常,但出现错误 在windows 2003上执行时。以下是错误: C:\dist>Monitor_server.exe Traceback (most recent call last): File `Monitor_server.py`, line 9, in <module>

我已经编写了Python脚本,用于获取CPU使用率、RAM和 Windows服务器的磁盘使用情况

然后我通过将脚本转换为.exe以在服务器上执行

.exe在windows 2008服务器上运行正常,但出现错误 在windows 2003上执行时。以下是错误:

C:\dist>Monitor_server.exe
Traceback (most recent call last):
  File `Monitor_server.py`, line 9, in <module>
  File `psutil\__init__.pyo`, line 85, in <module>
  File `psutil\_psmswindows.pyo`, line 15, in <module>
  File `_psutil_mswindows.pyo`, line 12, in <module>
  File `_psutil_mswindows.pyo`, line 10, in __load
ImportError: DLL load failed: The specified procedure could not be found.
包括几个预处理器条件,用于查看正在编译的Windows版本,使其相当特定于该版本

您需要为不同的主要版本构建一个包

具体而言:

  • 在WIN32_WINNT 0x0501(XP+SP2)上,使用进程内存计数器
  • 在WIN32_WINNT 0x0600(Vista)中,使用NtQueryInformationProcess
  • 当为本机64位构建设置_WIN64时,数据类型涉及不同的数据类型(长-长,而不是长)

现在,让我们看看这是如何实现的:

  • Windows Server 2003使用WIN32\u WINNT 0x0502
  • Windows Server 2008使用WIN32\u WINNT 0x0600(与Vista相同)

…那么,你的答案是:Windows Server 2008和Vista上使用的界面在2003年不可用。(您可以在2003年进行编译,并在2008年使用生成的二进制文件,但这将失去较新界面的优势)。

您可以展示脚本吗?您可以格式化脚本吗?这是一件会发生的事情——不同的平台需要不同的DLL,但包含哪些DLL是由构建系统决定的(因此取决于构建系统);不包括在不同版本的Windows上需要但在构建系统本身上不需要的DLL。没有一个简单的解决方案,而且该行为与其依赖链的关联性不如与代码的关联性。比较两个平台上的
python-m py2exe.mf-d yourscript.py
的输出是一个合理的起点。此外,脚本本身没有与之一起使用的
setup.py
有趣/有用/信息量大。
# -*- coding: utf-8 -*-
import string
import smtplib,datetime
import time
import os,shutil
import codecs
import psutil
import re
import gc,sys
import objgraph

def mem(each_pro):
        rss,vms = each_pro.get_memory_info()
        if rss > 100 * 1024 * 1024:
            each_pro.kill()
            os.startfile("D:\Interface.exe")
        else:
            return

#####  

if __name__ == "__main__":
    while True: 
        all_pro = psutil.get_process_list()
        for each_pro in all_pro:
            pro_n = re.search(r'\'.+\..+\'',str(each_pro))  
            if pro_n:
                    p_ln = pro_n.group()
                    p_ln = p_ln[1:-1]
                    if p_ln.lower() == "Interface.exe":
                        mem(each_pro)
                    else:
                        pass
            else:
                pass
        time.sleep(500)