Python 使用pySerial连接到非COM端口

Python 使用pySerial连接到非COM端口,python,windows-xp,serial-port,pyserial,hyperterminal,Python,Windows Xp,Serial Port,Pyserial,Hyperterminal,在超级终端中,我可以连接到一个名为“X64-CL_iPro_1_serial_0”的串行端口,在那里我可以向相机发送/接收ASCII文本。但是,当我尝试使用pySerial连接到同一端口时,它会引发异常: SerialException:无法打开端口X64-CL\u iPro\u 1\u Serial\u 0:[错误2]系统找不到指定的文件。 我不明白为什么超级终端可以检测端口并与之通信,但Python不能。我从pySerial网站下载,该网站显示了一系列串行端口,它提供的唯一端口是COM1和C

在超级终端中,我可以连接到一个名为“X64-CL_iPro_1_serial_0”的串行端口,在那里我可以向相机发送/接收ASCII文本。但是,当我尝试使用pySerial连接到同一端口时,它会引发异常:

SerialException:无法打开端口X64-CL\u iPro\u 1\u Serial\u 0:[错误2]系统找不到指定的文件。

我不明白为什么超级终端可以检测端口并与之通信,但Python不能。我从pySerial网站下载,该网站显示了一系列串行端口,它提供的唯一端口是COM1和COM2,这两个端口我都无法连接

我的代码非常简单,如下所示:

import serial
port = "X64-CL_iPro_1_Serial_0"
ser = serial.Serial(port)
s = serial.Serial("\\\\.\\X64-CL_iPro_1_Serial_0")  # also remember to escape backslash
我做错什么了吗?有办法解决这个问题吗?提前谢谢

编辑:
还应注意,此端口不会显示在设备管理器中,COM1或COM2也不会显示。

问题在于您链接的枚举代码。这在两个方面是错误的:

  • 它使用固定的GUID\u类\u组件进行枚举。相反,它应该通过SetupDiClassGuidsFromName请求GUID,传递“Ports”作为它请求名称的类的描述
  • 代码坚持要求提供友好的港口名称。但是,如果唯一的目标是打开设备(而不是向用户显示),它应该直接访问DevicePath元素,这是一个外观怪异但完全有效的端口名,可以传递给pySerial。友好的名字甚至可能完全不见了
  • 旁白

    我不清楚问题是关于通过
    pyserial
    使用非串行端口,还是枚举中不是COMX端口的串行端口

    对于您的使用,这可能有点太难或太难了,但这里首先使用
    pyserial
    对象中的其他文件:

    foo = serial.Serial()
    peer = serial.Serial()
    foo.fd, peer.fd = posix.openpty()
    try: foo._isOpen = peer._isOpen = True  # depending on pyserial version
    except: pass
    foo._reconfigurePort()
    peer.setTimeout(timeout=0.1)
    peer._reconfigurePort()
    
    关于second,请记住
    COM9
    以外的端口使用奇怪的windows符号
    \.\COM10
    ,这可能就是超级终端为您所做的
    pyserial
    不起作用,因此您可能需要打开端口,如下所示:

    import serial
    port = "X64-CL_iPro_1_Serial_0"
    ser = serial.Serial(port)
    
    s = serial.Serial("\\\\.\\X64-CL_iPro_1_Serial_0")  # also remember to escape backslash
    
    这是什么操作系统?(补充:哦,可能是Windows,因为您有COM1和COM2,对吧…)