¿Cuál es el método multiplataforma para enumerar puertos serie en Python (incluidos los puertos virtuales)?

Nota: Estoy usando Python 2.7 y pySerial para comunicaciones seriales.

Encontré este artículo que enumera dos maneras:http://www.zaber.com/wiki/Software/Python#Displaying_a_list_of_available_serial_ports

Este método funciona en Windows y Linux, pero a veces pierde puertos virtuales en 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)

Y este que solo funciona en Linux, pero incluye puertos virtuales:

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

Supongo que podría hacer una detección de plataforma para usar el segundo método (el que incluye puertos virtuales) cuando se ejecuta en Linux, y el primer método cuando se ejecuta Windows, pero ¿qué pasa con Mac?

¿Cómo debo enumerar los puertos serie (virtuales también) independientemente de la plataforma?

Editar

Encontré algunas preguntas pertinentes:

MacPython: encontrando programáticamente todos los puertos serialesMacOS: ¿cuál es la diferencia entre /dev/tty.* y /dev/cu.*?¿Cómo encontrar todos los dispositivos serie (ttyS, ttyUSB, ..) en Linux sin abrirlos?

Respuestas a la pregunta(4)

Su respuesta a la pregunta