Qual é o método de plataforma cruzada de enumeração de portas seriais no Python (incluindo portas virtuais)?

Nota: Estou usando o Python 2.7 e pySerial para comunicação serial.

Eu encontrei este artigo que lista duas maneiras:http://www.zaber.com/wiki/Software/Python#Displaying_a_list_of_available_serial_ports

Esse método funciona no Windows e no Linux, mas às vezes não tem portas virtuais no 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)

E este que só funciona no Linux, mas inclui portas virtuais:

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

Eu suponho que eu poderia fazer a detecção de plataforma para usar o segundo método (aquele que inclui portas virtuais) quando rodando no Linux, e o primeiro método quando rodando o Windows, mas e o Mac?

Como devo enumerar as portas seriais (virtuais também) independentemente da plataforma?

Editar

Eu encontrei algumas questões pertinentes:

MacPython: encontrar programaticamente todas as portas seriaisMacOS: qual a diferença entre /dev/tty.* e /dev/cu.*?Como encontrar todos os dispositivos seriais (ttyS, ttyUSB, ..) no Linux sem abri-los?

questionAnswers(4)

yourAnswerToTheQuestion