使用 Python 打造一个轻量级系统信息查看器

复制代码
    ╔══════════════════════════════════════════════════════════════╗
    ║                    🐍 Python 系统信息查看器                    ║
    ║                                                              ║
    ║  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐      ║
    ║  │   系统信息   │───▶│   数据处理   │───▶│   报告生成   │      ║
    ║  └─────────────┘    └─────────────┘    └─────────────┘      ║
    ║                                                              ║
    ║              轻量级 • 无依赖 • 跨平台                          ║
    ╚══════════════════════════════════════════════════════════════╝

阅读: 约 8 分钟 | 字数: 2000+ | 更新: 2025-09-30

关键词: Python · 标准库 · Windows

文章目录

引言

在日常开发和系统管理中,我们经常需要快速获取计算机的硬件和软件信息。虽然市面上有许多功能强大的系统信息工具,但它们往往体积庞大、依赖复杂。本文将介绍一个使用纯 Python 标准库编写的轻量级系统信息查看器,它无需安装任何第三方库,即可在 Windows 环境下运行,并生成一份详细的系统报告。

源码仓库: https://gitcode.com/2401_82619496/pythonlab_code/tree/main

功能概览

这个脚本的核心优势在于其 "绿色""便携" 的特性:

复制代码
┌─────────────────────────────────────────────────────────────┐
│                        功能架构图                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  基本系统信息 ──┐                                            │
│                │                                            │
│  磁盘使用情况 ──┤                                            │
│                │                                            │
│  网络配置信息 ──┼──▶ 数据收集器 ──▶ 格式化输出 ──▶ TXT报告    │
│                │                                            │
│  环境变量信息 ──┤                                            │
│                │                                            │
│  Python环境 ───┘                                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

核心特性

  • 基本系统信息: 获取操作系统版本、计算机名称、用户名等
  • 磁盘使用情况: 显示每个磁盘分区的总空间、已用空间和可用空间
  • 网络配置: 列出所有网络接口的 IP 地址和 MAC 地址
  • 环境变量: 展示当前系统的环境变量配置
  • 实时时间和启动时间: 显示系统当前时间和开机时间
  • Python 环境信息: 获取 Python 版本、解释器路径等
  • 报告生成 : 将所有收集到的信息保存到一个 .txt 文件中,方便查阅和分享

运行效果预览

系统信息收集流程

启动程序 初始化收集器 开始收集 获取基本系统信息 获取磁盘使用情况 获取网络配置 获取环境变量 获取时间信息 获取Python环境 数据汇总 控制台显示 生成TXT报告 程序结束

核心代码解读

接下来,我们将深入探讨 simple_system_info.py 中的关键代码实现。

1. 获取基本系统信息

我们使用 platformos 模块来获取操作系统的基本信息。
💡 为什么选择 platform 模块?

platform 模块是 Python 标准库的一部分,专门用于获取平台相关信息。相比直接调用系统命令,它具有以下优势:

  • 跨平台兼容性好
  • 返回格式统一
  • 无需处理命令行输出解析
  • 性能开销小
python 复制代码
import platform
import os

def 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设备)
python 复制代码
import os
import shutil

def 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()  组装结果
python 复制代码
import socket

def 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 subprocess
        result = subprocess.run(['ipconfig', '/all'], 
                              capture_output=True, text=True, 
                              creationflags=subprocess.CREATE_NO_WINDOW)
        if result.returncode == 0:
            info["详细网络配置"] = "已获取(详见报告文件)"
    except:
        pass
        
    return info

数据显示与报告生成

为了提供更好的用户体验,脚本在控制台中使用了简单的进度条来展示信息收集的过程,并最终将所有信息汇总输出。

1. 在控制台显示信息

display_info_in_console 函数负责将收集到的信息格式化并打印到控制台。

python 复制代码
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 文件中。文件名中包含了当前的时间戳,以确保每次运行生成的报告都是唯一的。
💡 为什么使用时间戳命名?

使用时间戳命名文件有以下好处:

  • 避免文件名冲突
  • 便于按时间排序查看历史报告
  • 可以追踪系统信息的变化趋势
  • 支持批量生成报告而不覆盖
python 复制代码
import time
import os

def 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

🐧 感谢阅读!如果这篇文章对你有帮助,请点赞收藏支持一下!

📝 作者: 做运维的阿瑞

相关推荐
磨十三2 小时前
C++ 中的类型双关、union 与类型双关:让一块内存有多个“名字”
开发语言·c++
chao_7892 小时前
Union 和 Optional 区别
开发语言·数据结构·python·fastapi
hsjkdhs2 小时前
C++之类的组合
开发语言·c++·算法
程序员晚枫2 小时前
深度解析:Python中处理PDF的库有很多,我应该选择哪一个?
python
起风了___2 小时前
Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析
后端·docker
疯狂的Alex3 小时前
【C#避坑实战系列文章16】性能优化(CPU / 内存占用过高问题解决)
开发语言·性能优化·c#
用户4099322502123 小时前
PostgreSQL视图不存数据?那它怎么简化查询还能递归生成序列和控制权限?
后端·ai编程·trae
象骑士Hack3 小时前
dev c++工具下载 dev c++安装包下载 dev c++软件网盘资源分享
开发语言·c++
karry_k3 小时前
CopyOnWriteArraySet
后端