python-win32 python Exe未在Windows 2003上运行
我已经编写了Python脚本,用于获取CPU使用率、RAM和 Windows服务器的磁盘使用情况 然后我通过将脚本转换为.exe以在服务器上执行 .exe在windows 2008服务器上运行正常,但出现错误 在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>
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)