Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件

news2024/11/30 6:56:45

引言

今天给大家分享一篇有关Python和Windows系统的文章。你有没有想过如何获取Windows系统的硬件信息?或者你是否曾经尝试过将Python脚本编译打包成可执行文件?如果你对这些问题感兴趣,那么这篇文章一定适合你。

背景

由于公司现阶段大多数应用软件都是基于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~~


感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出。

写在最后

这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。

都到这了记得三连支持一下吧。


完整版文档下载方式:

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享。

在评论区和我互动交流或者私❤我【软件测试学习】领取即可,拿走不谢。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件兼容性测试怎么进行?兼容性测试有什么作用?

随着软件的不断更新和升级,兼容性测试也逐渐成为了软件测试的一项重要内容。那么,软件兼容性测试到底是什么?怎么进行?又有什么作用呢? 一、什么是软件兼容性测试? 软件兼容性测试是指在不同的操作系统、硬件设备、浏览器等多个环境下测试软件的可…

VulnHub项目:Hogwarts:Bellatrix

靶机地址:Hogwarts: Bellatrix ~ VulnHub 哈利波特系列~有趣~~~ 渗透过程: 首先获取靶机ip地址 对其端口探测 访问web端口,发现了小天狼星的堂姐Bellatrix Lestrange贝拉特里克斯莱斯特兰奇那个疯狂的女人!!&#x…

天涯直播筹资300万,七天仅赚14.99万,重启计划岌岌可危

我是卢松松,点点上面的头像,欢迎关注我哦! 天涯前天涯社区总编直播卖货欲筹300万,重启天涯。直播七天七夜只赚了14.99万。对于普通人来说,这收入真的是望尘莫及了,但对于天涯来说杯水车薪。 也许天涯部分…

前端工程化初体验

最近在尝试着完整地体验一下前端工程化需要的那些流程,于是自己尝试一套属于自己的前端工程化流程。 前端工程化需要做什么: 1、创建项目需要有项目模板资源,所以这里我创建了一个前端脚手架CLI工具,mfex-project,主…

Win10系统蓝屏如何使用U盘重装系统?

Win10系统蓝屏如何使用U盘重装系统?很多用户遇到了电脑系统蓝屏问题之后,都不知道怎么去进行系统重装的方法。其实系统重装没有大家想象的那么困难,以下为大家带来详细的图文教程分享。 准备工作: 1、U盘一个(尽量使用…

2023年5月CSDN客服月报|解决5个重大问题和18个次要问题,采纳1个用户建议,处理2个用户需求

听用户心声,解用户之需。hello,大家好,这里是《CSDN客诉报告》第20期,接下来就请大家一同回顾我们5月份解决的bug~ 一、重大问题 1、【商城】已支付订单权益未正常下发 反馈量:23 2、【UC】收藏/评论/账…

2023年湖北高考作文AI写

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 2023年湖北高考作文AI写 🧊摘要🧊原题🧊解析🧊AIGCInsCode AI 创作助手文心一言讯飞星火 SparkDeskChatGPT3.5 🧊摘要 本文…

CANoe学习笔记一

目录 摘要 1、CANoe工程的新建 2、通过Trace工具查看交互的报文内容 3、通过Logging保存日志文件 4、创建IG发送报文 5、通过Graphics界面抓取信号波形 6、加载cdd文件 7、过滤报文ID的接收 8、其他 摘要 CANoe是德国Vector公司为汽车总线的开发而设计的一款总线开发环…

nuxt3.0学习-四、nuxt3.0的middleware(中间键)、composables(可组合物)以及Plugins(插件目录)

Nuxt3.0中间键了解地址 Nuxt提供了一个可定制的路由中间件框架,您可以在整个应用程序中使用它,非常适合在导航到特定路由之前提取要运行的代码; 路由中间件有三种: 匿名(或内联)路由中间件,直…

最佳 AI 生产力工具:更聪明地工作,而不是更努力地工作

在20世纪50年代,AI 在内存耗尽之前几乎无法完成跳棋游戏。 快进七个激动人心的十年,可以理解自然语言的人工智能系统——大型语言模型 (LLM)——正在成为我们数字工具箱中的重要工具。 在今天的文章中,我们梳理了一些提高生产力的最佳人工智…

【SpringBoot】 设置随机数据 用于测试用例

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 设置随机数据——常用于测试用例 SpringBoot设…

Research Day 2023:Succinct ZKP最新进展

1. 引言 主要见Ying Tong在Research Day 2023上视频分享: Advances in the Efficiency of Succinct Proofs - Ying Tong ZKP技术可用于: 1)Verifiable virtual machine:如各种zkEVM和zkVM。2)verifiable cloud com…

领跑云原生安全赛道!安全狗云甲获信通院多项荣誉认可

6月6日,ICT 中国2023高层论坛-云原生产业发展论坛在北京成功举办。 作为国内云原生安全领导厂商,安全狗受邀出席此次活动。 据悉,此次论坛主要包含论坛开幕式、成果发布、产业发展等三大部分。云原生领域领军智库、院士专家、企业高层等多位…

企业培训直播场景下嘉宾连线到底是如何实现的?

企业培训直播场景下,进行音视频连线的嘉宾,都拥有面向学员教学的权限,支持多位老师/专家异地同堂授课,那么,这种嘉宾连线到底是如何实现的? 企业培训,如何做到不受时间和地点限制,实…

数据单一触发数据库锁

【引言】 作为一名数据库开发人员或者管理员,那么你一定知道数据库锁在维护数据一致性中的作用。但是,你有没有想过,什么情况下会触发数据库锁呢? 本文将讲述一种常见的情况——数据单一触发数据库锁,并且分享如何避…

KDZD绝缘油介质损耗电阻率测试仪特点

一、概述 测试仪依据GB/T5654-2007《液体绝缘材料相对电容率、介质损耗因数和直流电阻率的测量》设计制造。用于绝缘油等液体绝缘介质的介质损耗因数和直流电阻率的测量。 一体化结构。内部集成了介损油杯、温控仪、温度传感器、介损测试电桥、交流试验电源、标准电容器、高阻计…

我用ChatGPT写2023高考语文作文(一):全国甲卷

2023高考全国甲卷语文作文题目: 人们因技术发展得以更好地掌控时间,但也有人因此成了时间的仆人。 这句话引发了你怎样的联想与思考?请写一篇文章。 要求:选准角度,确定立意,明确文体,自拟标题&…

Linux系统下SQLite创建数据库, 建表, 插入数据保姆级教程

1,创建数据库: sqlite test.db 我这边是sqlite2版本, 直接使用命令sqlite test.db创建一个名称为test的数据库; test是你自定义是数据库名, 创建好数据库后, 接下来开始创建表格 2.创建表格, 就是常规的sql建表语句 CREATE TABLE ids_logs ( english_details TEXT, chines…

LeetCode_数据结构设计_中等_173.二叉搜索树迭代器

目录 1.题目2.思路3.代码实现(Java) 1.题目 实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(TreeNode root):初始化 BSTIterator 类的一个…

便捷工具箱(更新中)

遇到问题怎么办?不慌,我可以帮你解决 1.浏览器视频播放速度一般只有0.5x,1.0x,1.5x,2.0x四种选项,对于我们来说是不够用的,那该怎么办呢?别慌,有代码。 解决办法&#x…