如何使用Python模块'serial.tools.list_ports'获取可用串口列表?

5

我是python的新手,需要在程序中选择一个可用的串口列表。根据这里所说,serial.tools.list_ports模块可以通过执行serial.tools.list_ports.comports()方法来实现。因此,我在python解释器中执行了以下代码:

最初的回答

import serial.tools.list_ports
a=serial.tools.list_ports.comports()
print(a)

结果是:

最初的回答
[<serial.tools.list_ports_linux.SysFS object at 0x7f2503d27be0>]

当我在Ubuntu终端中使用以下命令时:

Original Answer翻译成"最初的回答"

python3 -m serial.tools.list_ports

它返回了我想要的内容:

最初的回答

/dev/ttyUSB0        
1 ports found

问题出在哪里?最初的回答是:

问题所在?


2
print(a[0]) 输出什么? - ForceBru
谢谢!它起作用了。我们应该访问对象属性,如 namedevice 等等。在 pyserial 的文档中说输出是一个 ListPortInfo 对象。但这里是 SysFs,它没有 __bases__ 属性。 - mstfyghm
2个回答

9
根据您提供的文档,该函数返回一个 ListPortInfo 对象列表。这些对象有几个属性可以使用,例如 device
完整的设备名称/路径,例如 /dev/ttyUSB0
为了模拟命令 python3 -m serial.tools.list_ports,您可以执行以下操作:
import serial.tools.list_ports

ports = serial.tools.list_ports.comports()
for p in ports:
    print(p.device)
print(len(ports), 'ports found')

这是它实际执行的简化版本。


3

一种更简单的方法(使用上面/下面的答案)是在从list_ports.comports()获取的端口列表中使用.device进行迭代,以返回列表。

例如:

ports = serial.tools.list_ports.comports()
# 'com_list' contains list of all com ports

com_list = []

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接