暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 python 收集硬件信息

老柴杂货铺 2025-04-02
88
支持跨平台硬件信息收集和 Markdown 报告生成:
安装依赖库:
    pip install psutil wmi
    完整代码:
      from os import system
      import platform
      import subprocess
      from datetime import datetime
      import sys
      import psutil
      import wmi  # 仅限 Windows
      def get_system_info():
          #获取系统信息
          system_info = {
              "操作系统": platform.system(),
              "版本号": platform.version(),
              "架构": platform.architecture()[0],
              "处理器": platform.processor(),
              "系统名称": platform.node()       
          }
          return system_info
      def get_cpu_info():
          #获取 CPU 信息
          cpu_info = []
          if platform.system() == 'Windows':
              c = wmi.WMI()
              for cpu in c.Win32_Processor():
                  cpu_info.append({
                      "型号": cpu.Name.strip(),
                      "制造商": cpu.Manufacturer,
                      "核心数": cpu.NumberOfCores,
                      "线程数": cpu.NumberOfLogicalProcessors,
                      "最大频率(GHz)"round(float(cpu.MaxClockSpeed) / 10002)
                  })
          else:
              cmd = "lscpu" if platform.system() == 'Linux' else "sysctl -n machdep.cpu.brand_string"
              model = subprocess.check_output(cmd, shell=True).decode().strip()
              cpu_info.append({
                  "型号": model,
                  "制造商""Unknown",
                  "核心数": psutil.cpu_count(logical=False),
                  "线程数": psutil.cpu_count(logical=True),
                  "最大频率(GHz)"round(psutil.cpu_freq().max / 10002if psutil.cpu_freq() else 'N/A'
              })
          return cpu_info
      def get_memory_info():
          #获取内存信息
          mem_info = []
          if platform.system() == 'Windows':
              c = wmi.WMI()
              for mem in c.Win32_PhysicalMemory():
                  mem_info.append({
                      "容量(GB)"round(int(mem.Capacity) / (1024**3), 2),
                      "类型": _get_mem_type(mem.SMBIOSMemoryType),
                      "频率(MHz)": mem.ConfiguredClockSpeed or 'N/A',
                      "厂商": mem.Manufacturer or 'Unknown'
                  })
          else:
              total = psutil.virtual_memory().total
              mem_info.append({
                  "容量(GB)"round(total / (1024**3), 2),
                  "类型""Unknown",
                  "频率(MHz)""N/A",
                  "厂商""Unknown"
              })
          return mem_info
      def _get_mem_type(mem_type):
          #转换内存类型代码为文字
          types = {
              20"DDR"21"DDR2"24"DDR3"
              26"DDR4"30"DDR5"
          }
          return types.get(mem_type, "Unknown")
      def get_disk_info():
          #获取磁盘信息
          disks = []
          for part in psutil.disk_partitions():
              if 'cdrom' in part.opts or part.fstype == '':
                  continue
              usage = psutil.disk_usage(part.mountpoint)
              disks.append({
                  "设备": part.device,
                  "挂载点": part.mountpoint,
                  "文件系统": part.fstype,
                  "总容量(GB)"round(usage.total / (1024**3), 2)
              })
          return disks
      def get_gpu_info():
          """获取显卡信息(仅限Windows)"""
          if platform.system() == 'Windows':
              c = wmi.WMI()
              return [{
                  "型号": gpu.Name,
                  "显存(GB)"round(int(gpu.AdapterRAM) / (1024**3), 2)
              } for gpu in c.Win32_VideoController()]
          return []
      def get_network_info():
          """获取网络适配器信息"""
          if platform.system() == 'Windows':
              c = wmi.WMI()
              return [{
                  "名称": nic.Description,
                  "IP地址": nic.IPAddress[0if nic.IPAddress else 'N/A',
                  "MAC地址": nic.MACAddress
              } for nic in c.Win32_NetworkAdapterConfiguration(IPEnabled=True)]
          # 其他操作系统
          else:
              return [{
                  "名称": interface.name,
                  "IP地址": interface.address,
                  "MAC地址": interface.address
                  } for interface in psutil.net_if_addrs().values()]
      def generate_markdown(data):
          #生成 Markdown 报告#
          md = '# 系统硬件检测报告\n'
          md += '生成时间: '+datetime.now().strftime("%Y-%m-%d %H:%M:%S")+'\n'
          ## 系统信息
          # 系统信息表
          md += "\n## 系统信息\n"
          md += _create_table([data['system']])
          
          # CPU 信息表
          md += "\n## CPU 信息\n"
          md += _create_table(data['cpu'])
          
          # 内存信息表
          md += "\n## 内存信息\n"
          md += _create_table(data['memory'])
          
          # 磁盘信息表
          md += "\n## 存储信息\n"
          md += _create_table(data['disks'])
          # 显卡信息表
          md += "\n## 显卡信息\n"
          md += _create_table(data['gpu'])
          # 网络适配器信息表
          md += "\n## 网络适配器信息\n"
          md += _create_table(data['network'])
          
          return md
      def _create_table(data):
          # 生成 Markdown 表格
          if not data:
              return "无数据\n"
          
          headers = list(data[0].keys())
          table = "| " + " | ".join(headers) + " |\n"
          table += "| " + " | ".join(["---"] * len(headers)) + " |\n"
          
          for row in data:
              values = [str(row.get(h, 'N/A')) for h in headers]
              table += "| " + " | ".join(values) + " |\n"
          
          return table
      if __name__ == "__main__":
          hardware_data = {
              "system": get_system_info(),
              "cpu": get_cpu_info(),
              "memory": get_memory_info(),
              "disks": get_disk_info(),
              "gpu": get_gpu_info(),
              "network": get_network_info()
          }
          
          report = generate_markdown(hardware_data)
          print(hardware_data)
          with open("HardwareReport.md""w", encoding="utf-8"as f:
              f.write(report)
          
          print("硬件报告已生成: HardwareReport.md")

      此版本解决了以下关键问题:

      完全避免执行策略问题

      自动处理空值和类型转换

      支持主流操作系统

      输出标准化 Markdown 格式

      不依赖管理员权限(基础功能)

      文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论