Есть два подключенных СОМ порта ttyUSB0 и ttyUSB1, разрешение в группе есть (могу читать и записывать в них). Если "нулевой" занят, а "первый" нет, выводится на экран: "COM0 подключён, но занят или нет прав на чтение/запись, а COM1 доступен...". Остальные нет доступа.
Если "нулевой" свободен, а "первый" нет, на экране: "COM0 доступен, а COM1 и далее, недоступны! Пробовал начинать сканировать не с "нулевого" порта, картина менялась и на других портах! Это кажется бредом! Может, с исключениями что не так "завернул"? Вот пример:
import serial
for i in range(10):
if i < 0: # для отсечки нулевого порта 1 или более
continue
try:
ser = serial.Serial('/dev/ttyUSB%d' % i,
baudrate = 4800,
bytesize = 8,
parity = 'N',
stopbits = 2)
ser.isOpen()
print ('Доступен порт "COM %d"' % i)
except serial.serialutil.SerialException:
try:
ser.close()
print ('Не удалось открыть порт "COM %d"' % i)
except NameError:
print ('Порт "COM %d" подключён, но занят или нет прав на чтение/запись!' % i)
Хотелось было точный ответ в интерфейсе программы иметь об "созданных" и в то же время занятых портах!
Так как в pyserial только одна ошибка SerialException, которая говорит о разных проблемах, вы можете распарсить так:
except Exception as e: # вместо serial.serialutil.SerialException
if "Device or resource busy" in str(e):
print ('Порт "COM %d" занят' % i)
elif "FileNotFoundError" in str(e):
print ('Порт "COM %d" не найден' % i)
else:
print(e)