如何在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
相关产品推荐
相关产品推荐

