¿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?