求助完善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
相关产品推荐
相关产品推荐

