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

如何在Python中通过serial.tools.list_ports仅获取COMx端口?

解决pyserial仅显示COM端口而非设备描述的问题

嘿,这问题我之前也踩过坑!你现在的代码里直接把port对象塞进列表,而pyserial的ListPortInfo对象默认的字符串输出会包含设备描述、硬件ID这些额外信息,所以才会显示多余内容。核心解决思路就是提取对象里的纯COM端口名属性。

最简单的修改方案

直接访问每个port对象的device属性,这个属性就是你要的COMx字符串:

import serial.tools.list_ports
ports = serial.tools.list_ports.comports()
List1 = []
for port in sorted(ports):
    # 提取device属性,仅保留COM端口名
    List1.append(port.device)
print(*List1)

用列表推导式简化代码

如果想让代码更简洁,用列表推导式一步搞定:

import serial.tools.list_ports
# 排序后直接提取每个port的device属性
com_ports = [port.device for port in sorted(serial.tools.list_ports.comports())]
print(*com_ports)

进阶:按COM端口号数字排序(可选)

默认的sorted()是按字符串排序,会出现COM1、COM10、COM2这种不符合直觉的顺序。如果想按端口号数字排序,可以自定义排序规则:

import serial.tools.list_ports

def get_com_number(port):
    # 从COMx中提取数字部分,转为整数用于排序
    return int(port.device.lstrip('COM'))

ports = serial.tools.list_ports.comports()
# 用自定义key实现按端口号数字排序
sorted_com_ports = [port.device for port in sorted(ports, key=get_com_number)]
print(*sorted_com_ports)

这样输出的顺序就是COM1、COM2、COM10这种符合预期的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:14:15