使用 Python 打造一个轻量级系统信息查看器
╔══════════════════════════════════════════════════════════════╗║ 🐍 Python 系统信息查看器 ║║ ║║ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ║║ │ 系统信息 │───▶│ 数据处理 │───▶│ 报告生成 │ ║║ └─────────────┘ └─────────────┘ └─────────────┘ ║║ ║║ 轻量级 • 无依赖 • 跨平台 ║╚══════════════════════════════════════════════════════════════╝
阅读: 约 8 分钟 | 字数: 2000+ | 更新: 2025-09-30
关键词: Python · 标准库 · Windows
文章目录
- 引言
- 功能概览
- 核心特性
- 运行效果预览
- 系统信息收集流程
- 核心代码解读
- 1. 获取基本系统信息
- 2. 获取磁盘使用情况
- 3. 获取网络信息
- 数据显示与报告生成
- 1. 在控制台显示信息
- 2. 保存信息到文件
- 完整程序架构
- 使用示例
- 总结
- 项目亮点
引言
在日常开发和系统管理中,我们经常需要快速获取计算机的硬件和软件信息。虽然市面上有许多功能强大的系统信息工具,但它们往往体积庞大、依赖复杂。本文将介绍一个使用纯 Python 标准库编写的轻量级系统信息查看器,它无需安装任何第三方库,即可在 Windows 环境下运行,并生成一份详细的系统报告。
源码仓库: https://gitcode.com/2401_82619496/pythonlab_code/tree/main
功能概览
这个脚本的核心优势在于其 “绿色” 和 “便携” 的特性:
┌─────────────────────────────────────────────────────────────┐
│ 功能架构图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 基本系统信息 ──┐ │
│ │ │
│ 磁盘使用情况 ──┤ │
│ │ │
│ 网络配置信息 ──┼──▶ 数据收集器 ──▶ 格式化输出 ──▶ TXT报告 │
│ │ │
│ 环境变量信息 ──┤ │
│ │ │
│ Python环境 ───┘ │
│ │
└─────────────────────────────────────────────────────────────┘
核心特性
- 基本系统信息: 获取操作系统版本、计算机名称、用户名等
- 磁盘使用情况: 显示每个磁盘分区的总空间、已用空间和可用空间
- 网络配置: 列出所有网络接口的 IP 地址和 MAC 地址
- 环境变量: 展示当前系统的环境变量配置
- 实时时间和启动时间: 显示系统当前时间和开机时间
- Python 环境信息: 获取 Python 版本、解释器路径等
- 报告生成: 将所有收集到的信息保存到一个
.txt
文件中,方便查阅和分享
运行效果预览
系统信息收集流程
核心代码解读
接下来,我们将深入探讨 simple_system_info.py
中的关键代码实现。
1. 获取基本系统信息
我们使用 platform
和 os
模块来获取操作系统的基本信息。
platform
模块是 Python 标准库的一部分,专门用于获取平台相关信息。相比直接调用系统命令,它具有以下优势:
- 跨平台兼容性好
- 返回格式统一
- 无需处理命令行输出解析
- 性能开销小
import platform
import osdef get_basic_system_info():"""获取基本系统信息Returns:dict: 包含系统基本信息的字典"""info = {"操作系统": platform.system(),"操作系统版本": platform.version(),"操作系统发行版": platform.release(),"计算机名称": platform.node(),"处理器架构": platform.machine(),"处理器信息": platform.processor(),"当前登录用户": os.getlogin(),}return info
这段代码非常直观,通过调用 platform
模块的相应函数,我们可以轻松获取到关于操作系统的详细数据。
2. 获取磁盘使用情况
为了获取磁盘信息,我们遍历了从 ‘A’ 到 ‘Z’ 的所有盘符,并使用 os.path.exists
来检查盘符是否存在。
磁盘扫描流程:
A:\ ──▶ 检查存在性 ──▶ [存在] ──▶ 获取使用情况
B:\ ──▶ 检查存在性 ──▶ [不存在] ──▶ 跳过
C:\ ──▶ 检查存在性 ──▶ [存在] ──▶ 获取使用情况
...
Z:\ ──▶ 检查存在性 ──▶ [不存在] ──▶ 跳过
💡 为什么要遍历所有盘符?
在 Windows 系统中,磁盘驱动器以字母命名(A: 到 Z:)。通过遍历所有可能的盘符,我们可以:
- 自动发现所有可用的磁盘驱动器
- 无需预先知道系统有哪些磁盘
- 适应不同的系统配置
- 处理动态挂载的驱动器(如USB设备)
import os
import shutildef get_disk_info():"""获取所有磁盘的使用情况Returns:dict: 包含各磁盘使用情况的字典"""info = {}for i in range(ord('A'), ord('Z') + 1):vol = chr(i) + ':\\'if os.path.exists(vol):try:usage = shutil.disk_usage(vol)info[f"磁盘 {vol}"] = {"总空间": f"{usage.total / (1024**3):.2f} GB","已用空间": f"{usage.used / (1024**3):.2f} GB","可用空间": f"{usage.free / (1024**3):.2f} GB","使用率": f"{(usage.used / usage.total * 100):.1f}%"}except PermissionError:info[f"磁盘 {vol}"] = "无访问权限"return info
3. 获取网络信息
网络信息的获取稍微复杂一些。我们使用 socket
模块来获取本机的主机名和 IP 地址。
网络信息获取流程:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 获取主机名 │───▶│ 解析IP地址 │───▶│ 返回网络信息 │
└─────────────┘ └─────────────┘ └─────────────┘│ │ │socket.gethostname() socket.gethostbyname() 组装结果
import socketdef get_network_info():"""获取网络配置信息Returns:dict: 包含网络配置的字典"""hostname = socket.gethostname()try:ip_address = socket.gethostbyname(hostname)except socket.gaierror:ip_address = "无法解析"info = {"主机名": hostname,"IP 地址": ip_address,}# 尝试获取更多网络接口信息try:import subprocessresult = subprocess.run(['ipconfig', '/all'], capture_output=True, text=True, creationflags=subprocess.CREATE_NO_WINDOW)if result.returncode == 0:info["详细网络配置"] = "已获取(详见报告文件)"except:passreturn info
数据显示与报告生成
为了提供更好的用户体验,脚本在控制台中使用了简单的进度条来展示信息收集的过程,并最终将所有信息汇总输出。
1. 在控制台显示信息
display_info_in_console
函数负责将收集到的信息格式化并打印到控制台。
def display_info_in_console(all_info):"""在控制台显示收集到的系统信息Args:all_info (dict): 包含所有系统信息的字典"""print("╔" + "═" * 50 + "╗")print("║" + " " * 18 + "系统信息概览" + " " * 18 + "║")print("╚" + "═" * 50 + "╝")for category, details in all_info.items():print(f"\n┌─ {category} " + "─" * (45 - len(category)))if isinstance(details, dict):for key, value in details.items():if isinstance(value, dict):print(f"│ 📁 {key}:")for sub_key, sub_value in value.items():print(f"│ ├─ {sub_key}: {sub_value}")else:print(f"│ ▶ {key}: {value}")else:print(f"│ {details}")print("└" + "─" * 47)print("\n" + "═" * 50)print("信息收集完成")print("═" * 50)
2. 保存信息到文件
save_info_to_file
函数则负责将同样的信息写入到一个 .txt
文件中。文件名中包含了当前的时间戳,以确保每次运行生成的报告都是唯一的。
使用时间戳命名文件有以下好处:
- 避免文件名冲突
- 便于按时间排序查看历史报告
- 可以追踪系统信息的变化趋势
- 支持批量生成报告而不覆盖
import time
import osdef save_info_to_file(all_info):"""将系统信息保存到文件Args:all_info (dict): 包含所有系统信息的字典Returns:str: 生成的文件路径"""timestamp = time.strftime("%Y%m%d_%H%M%S")filename = f"system_info_report_{timestamp}.txt"with open(filename, 'w', encoding='utf-8') as f:f.write("╔" + "═" * 60 + "╗\n")f.write("║" + " " * 22 + "系统信息报告" + " " * 22 + "║\n")f.write("║" + " " * 18 + f"生成时间: {time.strftime('%Y-%m-%d %H:%M:%S')}" + " " * 18 + "║\n")f.write("╚" + "═" * 60 + "╝\n\n")for category, details in all_info.items():f.write(f"┌─ {category} " + "─" * (55 - len(category)) + "\n")if isinstance(details, dict):for key, value in details.items():if isinstance(value, dict):f.write(f"│ 📁 {key}:\n")for sub_key, sub_value in value.items():f.write(f"│ ├─ {sub_key}: {sub_value}\n")else:f.write(f"│ ▶ {key}: {value}\n")else:f.write(f"│ {details}\n")f.write("└" + "─" * 57 + "\n\n")f.write("═" * 60 + "\n")f.write("报告生成完成\n")f.write("═" * 60 + "\n")print(f"\n✅ 报告已保存至: {os.path.abspath(filename)}")return filename
完整程序架构
simple_system_info.py 程序架构
├── 导入模块
│ ├── platform (系统信息)
│ ├── os (操作系统接口)
│ ├── shutil (磁盘使用情况)
│ ├── socket (网络信息)
│ └── time (时间处理)
├── 数据收集函数
│ ├── get_basic_system_info()
│ ├── get_disk_info()
│ ├── get_network_info()
│ ├── get_environment_info()
│ ├── get_time_info()
│ └── get_python_info()
├── 显示和输出函数
│ ├── display_progress()
│ ├── display_info_in_console()
│ └── save_info_to_file()
└── 主程序入口└── main()
使用示例
运行程序后,您将看到类似以下的输出:
╔══════════════════════════════════════════════════════════════╗
║ 系统信息收集中... ║
╚══════════════════════════════════════════════════════════════╝[1/6] 正在收集基本系统信息... ████████████████████████████████ 100%
[2/6] 正在收集磁盘使用情况... ████████████████████████████████ 100%
[3/6] 正在收集网络配置信息... ████████████████████████████████ 100%
[4/6] 正在收集环境变量信息... ████████████████████████████████ 100%
[5/6] 正在收集时间相关信息... ████████████████████████████████ 100%
[6/6] 正在收集Python环境... ████████████████████████████████ 100%✅ 信息收集完成!
✅ 报告已保存至: E:\开发\csdn\system_info_report_20241230_143022.txt
总结
通过这个项目,我们展示了如何仅使用 Python 标准库来构建一个实用的小工具。它不仅代码简洁、易于理解,而且功能专一、执行高效。
项目亮点
┌─────────────────────────────────────────────────────────────┐
│ 项目特色 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ✓ 零依赖 │ 仅使用Python标准库,无需安装第三方包 │
│ ✓ 跨平台 │ 支持Windows、Linux、macOS等主流系统 │
│ ✓ 轻量级 │ 代码简洁,执行效率高 │
│ ✓ 易扩展 │ 模块化设计,便于添加新功能 │
│ ✓ 用户友好 │ 美观的控制台输出和详细的报告文件 │
│ │
└─────────────────────────────────────────────────────────────┘
对于那些希望在不引入额外依赖的情况下快速获取系统信息的用户来说,这无疑是一个绝佳的选择。
希望这篇文章能帮助你更好地理解如何利用 Python 与操作系统进行交互。如果你对这个项目感兴趣,可以从下面的源码仓库中获取完整代码,并根据自己的需求进行修改和扩展。
源码仓库: https://gitcode.com/2401_82619496/pythonlab_code/tree/main
🐧 感谢阅读!如果这篇文章对你有帮助,请点赞收藏支持一下!
📝 作者: 做运维的阿瑞