You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助完善Python系统信息采集脚本,生成指定格式CSV文件

Python系统信息采集脚本补全方案

需求说明

需要编写Python脚本采集以下系统信息,并输出为指定格式的CSV文件:

  • 计算机名称(Computer Name)
  • IP地址(IP-address)
  • MAC地址(MAC-address)
  • 活跃端口(Active ports)
  • 处理器型号(Processor Model)
  • 操作系统
  • 系统时间(System time)
  • 互联网连接速度(Internet connection speed)

指定CSV格式示例:
PF1VKNRQ, 192.168.1.2, 54-05-DB-3B-71-31, i7, Windows 10, 6//10/2023 8:00:01, 3Mb/s, 21;25;443;1234

前置准备

首先需要额外安装speedtest-cli库用于检测网络速度:

pip install speedtest-cli

补全后的完整代码

import csv
import platform
import psutil
import socket
import datetime
import speedtest

def get_system_info():
    system_info = {}

    # 计算机名称
    system_info['Computer_Name'] = platform.node()

    # IP地址(获取非本地回环的IPv4地址)
    ip_address = ""
    for interface, addrs in psutil.net_if_addrs().items():
        for addr in addrs:
            if addr.family == socket.AF_INET and not addr.address.startswith("127."):
                ip_address = addr.address
                break
        if ip_address:
            break
    system_info['IP_Address'] = ip_address if ip_address else "未检测到有效IP"

    # MAC地址(获取非本地回环的MAC,转换为短横线分隔格式)
    mac_address = ""
    for interface, addrs in psutil.net_if_addrs().items():
        for addr in addrs:
            if addr.family == psutil.AF_LINK and not addr.address.startswith("00:00:00:00:00:00"):
                mac_address = addr.address.replace(":", "-")
                break
        if mac_address:
            break
    system_info['MAC_Address'] = mac_address if mac_address else "未检测到有效MAC"

    # 处理器型号
    system_info['Processor_Model'] = platform.processor() or psutil.cpu_info()[0].brand_raw.strip()

    # 操作系统(拼接系统名称与版本)
    os_system = platform.system()
    os_release = platform.release()
    system_info['OS'] = f"{os_system} {os_release}"

    # 系统时间(匹配示例格式:月//日//年 时分秒)
    system_info['Sys_Time'] = datetime.datetime.now().strftime('%m//%d//%Y %H:%M:%S')

    # 互联网连接速度
    try:
        st = speedtest.Speedtest()
        download_speed = st.download() / 1_000_000  # 转换为Mb/s单位
        system_info['Net_Con_Spd'] = f"{round(download_speed, 1)}Mb/s"
    except Exception:
        system_info['Net_Con_Spd'] = "网络检测失败"

    # 活跃端口(获取监听状态的TCP端口,去重后用分号分隔)
    active_ports = set()
    for conn in psutil.net_connections(kind='tcp'):
        if conn.status == psutil.CONN_LISTEN:
            active_ports.add(str(conn.laddr.port))
    system_info['Active_Ports'] = ";".join(active_ports) if active_ports else "无活跃端口"

    return system_info

def write_to_csv(system_info, filename="system_info.csv"):
    # 严格按照指定CSV格式的字段顺序写入
    field_order = [
        'Computer_Name', 'IP_Address', 'MAC_Address',
        'Processor_Model', 'OS', 'Sys_Time',
        'Net_Con_Spd', 'Active_Ports'
    ]
    with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=field_order)
        writer.writeheader()
        writer.writerow(system_info)
    print(f"系统信息已成功写入{filename}")

if __name__ == "__main__":
    info = get_system_info()
    write_to_csv(info)

关键实现说明

  • IP/MAC地址:遍历网络接口筛选有效地址,排除本地回环与无效MAC
  • 处理器型号:兼容多系统获取逻辑,优先使用platform库, fallback到psutil
  • 系统时间:调整为示例要求的月//日//年 时分秒格式
  • 网络速度:通过speedtest-cli测试下载速度,异常时返回友好提示
  • 活跃端口:获取所有监听状态的TCP端口,去重后用分号分隔
  • CSV写入:严格遵循指定字段顺序,确保输出格式与示例一致

内容的提问来源于stack exchange,提问作者Blair Carter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:56:11