coo*_*ame 7 python windows pyserial python-2.7
我构建了一个脚本(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)
>>> 
伟大的!但是,我希望这个脚本能够自动从一堆中挑选出 MyCDCDevice 并连接到它。我试过:
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 不完全是一个字符串,而是某种对象?
无论如何,解决这个问题的正确方法是什么?
谢谢!!
我知道这篇文章很旧,但我想我会发布我的发现,因为没有“接受”的答案(迟到总比没有好)。
该文档有助于确定对象的成员,我最终找到了这个解决方案。
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)
小智 5
为了进一步扩展这一点,我发现使用相关设备的 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 个相同的设备。
(来源)
您可以使用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"
如果这不起作用,您可以尝试*在传递给的字符串末尾添加 a grep,以防描述符中存在多余字符。
| 归档时间: | 
 | 
| 查看次数: | 13868 次 | 
| 最近记录: |