【问题标题】:Finding a specific serial COM port in pySerial (Windows)在 pySerial (Windows) 中查找特定的串行 COM 端口
【发布时间】:2016-04-25 16:37:05
【问题描述】:

我构建了一个脚本(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 不完全是一个字符串,而是某种对象?

无论如何,正确的方法是什么?

谢谢!!

【问题讨论】:

  • 添加 else: print "NOT:",repr(p) 你有你的评论(这不是 python 评论......但我怀疑你知道)
  • 应该是str(p),但你也可以使用p.description
  • 我想就这么简单!谢谢大家,你摇滚! str(p) 成功了。
  • 在 Windows 中,即使在安装 pyserial 后导入也面临问题,关于如何解决这个问题的任何想法。错误是:“ImportError:没有名为 tools.list_ports 的模块”

标签: python windows python-2.7 pyserial


【解决方案1】:

您可以使用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 的字符串末尾添加一个*,以防描述符中有多余的字符。

【讨论】:

    【解决方案2】:

    为了进一步扩展这一点,我发现使用相关设备的 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)

    【讨论】:

      【解决方案3】:

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

      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)
      

      【讨论】:

        猜你喜欢
        • 2014-10-10
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多