我想,如果你想它的工作的一个反例未如预期,这就是我得到:
>>> serial.tools.list_ports.comports()
[('/dev/tty.Bluetooth-Incoming-Port', '/dev/tty.Bluetooth-Incoming-Port', '/dev/tty.Bluetooth-Incoming-Port'), ('/dev/tty.Bluetooth-Modem', '/dev/tty.Bluetooth-Modem', '/dev/tty.Bluetooth-Modem'), ('/dev/tty.usbserial-A1024XBO', '/dev/tty.usbserial-A1024XBO', '/dev/tty.usbserial-A1024XBO')]
其中一个FTDI USB转串口适配器插入这是可预期的,因为这里的comports()
功能:
def comports():
"""scan for available ports. return a list of device names."""
devices = glob.glob('/dev/tty.*')
return [(d, d, d) for d in devices]
这是Cygwin的一样,BSD,NetBSD的,IRIX,HP-UX,的Solaris/SunOS中,AIX ......
怎么说,结果可能发生?嗯,因为我pyserial是2.6版本,这是只有六个月大:-)
升级到一封来自PyPI最新版本(2.7)后,这里就是我得到:
>>> serial.tools.list_ports.comports()
[['/dev/cu.Bluetooth-Incoming-Port', 'n/a', 'n/a'], ['/dev/cu.Bluetooth-Modem', 'n/a', 'n/a'], ['/dev/cu.usbserial-A1024XBO', 'FT232R USB UART', 'USB VID:PID=403:6001 SNR=A1024XBO']]
所以基本上,加版本检查到setup.py中的最新版本pyserial
,否则您可能会遇到问题。虽然其他unix口味还没有添加支持。它看起来像VID:PID
字符串直接通过解析OS特定的东西来处理,使该字符串足够通用。所以基本上我猜你可以安全地得到它:vid, pid = sp[2].split(' ')[1].split('=')[-1].split(':')
(这是非常愚蠢的,为什么解析值来建立一个字符串,必须事后再解析?!,我的意思是他们做szHardwareID_str = 'USB VID:PID=%s:%s SNR=%s' % (m.group(1), m.group(2), m.group(4))
我们不能快乐,只是一个元组!)
最后,pyserial看起来与它的文档不一致,因为它说:On some systems description and hardware ID will not be available (None).
,而它确实返回'n/a'
。我想这将是固定在pyserial 2.8 :-)跨系统
ID的变化,这里有一个,你可以做'serial.Serial(0)'用于0',除了它具有在Windows不同的含义任意整数'和Linux操作系统。请记住,Windows编号从COM1和Linux开始,从ttyS0开始,然后添加到Windows COM过去9是'\\。\ COM10',而Linux udev允许您创建任意符号链接。最后,你最终会传递确切的字符串到'serial.Serail()' –
@qarma'serial.Serial(0)'会给你在Windows 7上的COM1句柄。一般来说,你可以通过'int(COM_NUMBER - 1 )'以获得正确的端口,也适用于索引> 9。 – Fookatchu