在pySerial(Windows)中查找特定的串行COM端口

2024-09-30 01:27:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经构建了一个脚本(Windows 7,Python 2.7)来列出串行端口,但是我正在寻找一个具有特定名称的设备。 我的剧本:

import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
    print(p)

这将返回:

COM3 - Intel(R) Active Management Technology - SOL (COM3)
COM6 - MyCDCDevice (COM6)
COM1 - Communications Port (COM1)
>>> 
太好了!但是,我希望这个脚本自动从群中挑选出mycdcddevice并连接到它。 我试过:

import serial.tools.list_ports

ports = list(serial.tools.list_ports.comports())
for p in ports:
    if 'MyCDCDevice' in p:
        print(p)
        // do connection stuff to COM6

但那不管用。我怀疑是因为p不是一个字符串,而是某种物体?

不管怎样,正确的方法是什么?

谢谢!!


Tags: inimport脚本forwindowsserialportstools
3条回答

为了进一步扩展,我发现使用有问题设备的PID和VID更安全。

import serial.tools.list_ports

# FTDI FT232 device (http://www.linux-usb.org/usb.ids)
pid="0403"
hid="6001"
my_comm_port = None

ports = list(serial.tools.list_ports.comports())

for p in ports:
    if pid and hid in p.hwid:
       my_comm_port = p.device

更好的是,您可以使用设备的序列号进行查找,以防插入了同一设备的2个。

Source

我知道这篇文章很老了,但我想我会发表我的发现,因为没有“接受”的答案(迟发总比不发好)。

This documentation帮助确定对象的成员,我最终得到了这个解决方案。

import serial.tools.list_ports

ports = list(serial.tools.list_ports.comports())
for p in ports:
    if 'MyCDCDevice' in p.description:
        print(p)
        # Connection to port
        s = serial.Serial(p.device)

您可以使用serial.tools.list_ports.grep,它为您搜索所有描述字段。例如:

from serial.tools import list_ports

try:
    cdc = next(list_ports.grep("MyCDCDevice"))
    # Do connection stuff on cdc
except StopIteration:
    print "No device found"

如果这不起作用,您可以尝试在传递给grep的字符串末尾添加一个*,以防描述符中有多余的字符。

相关问题 更多 >

    热门问题