Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件
Posted 那年故乡的明月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件相关的知识,希望对你有一定的参考价值。
由于公司现阶段大多数应用软件都是基于Windows系统开发和部署,很多软件安装部署都是在windows server 2012、windows server 2008之类的服务器上,部门同事每次测试一轮迭代或者系统测试后,在写测试报告时都需要在报告中写上测试的服务器硬件配置,如CPU、操作系统版本、内存、磁盘等,需要去远程服务器然后在服务器上各种查看服务器配置,比较浪费时间。最近学习了Python相关的知识,发现使用PYWIN32+WMI模块可以获取windows系统基本信息,并安装pyinstaller库,可以将写好的python脚本打包编译成exe的可执行文件,并将运行的结果写到生成的txt文本文件中,方便查看,然后就可以在任何一台windows系统的服务器上运行,得到服务器配置。
基于以上实现方式,果断开始安装配置所需要的模块和库,至于安装过程百度上有很多人已经给了说明,根据自己的Python版本对应安装即可。下面贴下可以参考的安装链接文档:
PYWIN32+WMI模块安装:https://blog.csdn.net/franktan2010/article/details/46520563
pyinstaller模块安装:https://blog.csdn.net/Jarvis_F/article/details/80367865 或者 https://blog.csdn.net/whl826661099/article/details/79624326
我现在使用的Python版本是Python3.6,开发编辑工具是PyCharm,整个安装完成后打开PyCharm进入Settings在工程目录下看到有如下package说明环境OK了,如下图我的安装:
需要的库安装配置好了后,开始学习WMI模块提供的方法,根据上面的需求我们的目的是获取操作系统的信息,将获取的配置信息写到txt的文本文件中,并使用pyinstaller打包编译成exe文件,Python代码走起,如下代码为实现过程:
1 \'\'\' 2 Code description:Create time:Developer: 3 \'\'\' 4 # -*- coding: utf-8 -*- 5 import wmi 6 import os 7 8 print("###使用说明:请打开计算机基础配置文件夹,进入到dist目录下,双击运行:计算机基础配置信息.exe文件," 9 "在命令行窗口输入保存的文件名,运行完成后打开生成的txt文本即可查看获取到的计算机基础配置信息###") 10 while True: 11 fname=input(\'enter filename>\') 12 if os.path.exists(fname): 13 print("Error:\'%s\' already exists" %fname) 14 else: 15 break 16 # open函数在打开目录中进行检查,如果有则打开,否则新建 17 fobj=open(fname,\'a\',encoding=\'utf-8\') 18 19 # 获取操作系统版本信息 20 def sys_version(): 21 c = wmi.WMI() 22 for sys in c.Win32_OperatingSystem(): 23 print("操作系统版本:%s" % sys.Caption) 24 fobj.write(\'操作系统版本:\' + sys.Caption) 25 print("操作系统位数:",sys.OSArchitecture) 26 fobj.write(\'\\n\' + \'操作系统位数:\' + sys.OSArchitecture) 27 # 获取机器IP和MAC地址以及网卡类型 28 def getIP(): 29 c = wmi.WMI() 30 for interface in c.Win32_NetworkAdapterConfiguration(IPEnabled=1): 31 print("网口型号为:",interface.Description) 32 fobj.write(\'\\n\' + \'网口型号为:\' + interface.Description) 33 for ip_address in interface.IPAddress: 34 print(ip_address) 35 fobj.write(\'\\n\' + \'IP地址和MAC地址:\' + ip_address) 36 # 获取CPU和内存大小 37 def cpu_and_mem(): 38 c = wmi.WMI() 39 for cpu in c.Win32_Processor(): 40 print("CPU: %s" % cpu.Name.strip()) 41 fobj.write(\'\\n\' + \'CPU:\' + cpu.Name.strip()) 42 for Memory in c.Win32_PhysicalMemory(): 43 print("内存大小: %.fGB" % ( (int(Memory.Capacity) / 1048576) /1024) ) 44 fobj.write(\'\\n\' + "内存大小: %.fGB" % ( (int(Memory.Capacity) / 1048576) /1024) ) 45 # 获取磁盘分区和各分区大小 46 def disk(): 47 c = wmi.WMI() 48 # 获取硬盘分区 49 for physical_disk in c.Win32_DiskDrive(): 50 for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"): 51 for logical_disk in partition.associators("Win32_LogicalDiskToPartition"): 52 print(physical_disk.Caption, partition.Caption, logical_disk.Caption) 53 fobj.write(\'\\n\' + \'磁盘分区:\' + physical_disk.Caption + partition.Caption + logical_disk.Caption) 54 # 获取各个磁盘分区大小 55 for disk in c.Win32_LogicalDisk(DriveType=3): 56 # print(disk.Caption, "%0.2f%% free" % (100.0 * int(disk.FreeSpace) / int(disk.Size))) 57 print(disk.Caption,"磁盘大小: %0.1fGB" % ((int(disk.Size) / 1048576) / 1024)) 58 fobj.write(\'\\n\' +disk.Caption + "磁盘大小: %0.1fGB" % ((int(disk.Size) / 1048576) / 1024)) 59 def main(): 60 sys_version() 61 getIP() 62 cpu_and_mem() 63 disk() 64 if __name__ == \'__main__\': 65 main() 66 67 fobj.close()
代码写好后,将脚本文件放入下载后解压的pyinstaller路径下,如下图:
然后cmd打开黑色命令行,cd 到上图的路径下,然后输入命令:python pyinstaller.py -F ***.py ,其中***.py为已经放置好的py脚本,回车,等待运行编译打包,看到successfully字样说明我们打包编译成功了,如下图:
然后在该路径下会生成一个以py文件名称同名的文件夹,在该文件夹下的dist下面就有编译好的exe可执行程序啦
后续可以将该exe可执行程序在任何一个windows机器上一键运行,得到运行结果的txt文本也在dist目录下,如下:
这样,这个小小的基于Python3编写的脚本小程序算是基本实现了最初我们想要达到的目的,以后再也不用各种查看服务器信息了,一键运行解决。O(∩_∩)O~~
以上是关于Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件的主要内容,如果未能解决你的问题,请参考以下文章