我想,如果你想它的工作的一個反例未如預期,這就是我得到:
>>> 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