Python 中的 Pyserial(列出没有 for 循环的可用组件)

Pyserial in Python(List out available comports without for loop)

import serial.tools.list_ports

ports = serial.tools.list_ports.comports()

print(ports)
#[<serial.tools.list_ports_common.ListPortInfo object at 0x000001D48771C9B0>, <serial.tools.list_ports_common.ListPortInfo object at 0x000001D48866FB00>]

如您所见,comports 不可读,我可以通过 for 循环使其可读,但我需要在列表中使用可读单词,例如。 ["COM1","COM2","COM3"]

有人知道要改吗?我尝试创建一个新列表并在循环中追加也没有运气。当我打印出来时,结果是一样的。

更新: 我认为我上次所做的是再次将每个对象附加在一起。我能够通过以下代码获得我想要的特定信息,即 COM:

import serial.tools.list_ports

ports = serial.tools.list_ports.comports()

available_ports = []

for p in ports:
    available_ports.append(p.device)

print(available_ports)

您可以遍历列表并获取名称:

import serial.tools.list_ports

ports = serial.tools.list_ports.comports()

print([port.name for port in ports])

comports()方法returnListPortInfo对象。

然后,您可以访问此 class 的一堆属性以获得所需的结果:

  • name:短设备名称,例如ttyUSB0
  • device:完整设备 name/path,例如/dev/ttyUSB0

See the docs.

对此的一般解决方案可能是:

from serial.tools.list_ports import comports

ports = [p.name for p in comports()]

print(ports)
ports = [p.name for p in comports()]

语句打印

[None, None, None, None]

in Windows 10(使用 python 3.61 + pyserial v3.4)。改为

ports = [p.device for p in comports()]

获取有效的端口名称。

['COM1', 'COM2', 'COM5', 'COM6']

作为一个有点讨厌的 hack,comports() 返回的对象是一个生成器。您只需通过转换即可获得列表(在本例中为列表的列表,或 2D table):

from serial.tools.list_ports import comports
allPorts = list ( comports() )
print allPorts

但是,如果你只是想要名字,你仍然需要提取一列,所以上面的解决方案更好。