Что такое кроссплатформенный метод перечисления последовательных портов в Python (включая виртуальные порты)?

Note: Я использую Python 2.7 и pySerial для последовательной связи.

Я нашел эту статью, в которой перечислены два пути:http://www.zaber.com/wiki/Software/Python#Displaying_a_list_of_available_serial_ports

Этот метод работает в Windows и Linux, но иногда пропускает виртуальные порты в Linux:

import serial

def scan():
   # scan for available ports. return a list of tuples (num, name)
   available = []
   for i in range(256):
       try:
           s = serial.Serial(i)
           available.append( (i, s.portstr))
           s.close()
       except serial.SerialException:
           pass
   return available

print "Found ports:"
for n,s in scan(): print "(%d) %s" % (n,s)

И этот работает только в Linux, но включает в себя виртуальные порты:

import serial, glob

def scan():
   # scan for available ports. return a list of device names.
   return glob.glob('/dev/ttyS*') + glob.glob('/dev/ttyUSB*')

print "Found ports:"
for name in scan(): print name

Я полагаю, что я мог бы сделать определение платформы, чтобы использовать второй метод (тот, который включает в себя виртуальные порты) при работе в Linux, и первый метод при запуске Windows, но как насчет Mac?

Как мне перечислить последовательные порты (тоже виртуальные) независимо от платформы?

Edit

Я нашел несколько подходящих вопросов:

MacPython: programmatically finding all serial ports MacOS: what's the difference between /dev/tty.* and /dev/cu.*? How to find all serial devices (ttyS, ttyUSB, ..) on Linux without opening them?

Ответы на вопрос(4)

Ваш ответ на вопрос