Как использовать Pyserial, чтобы определить, используется ли последовательный порт другим приложением? - PullRequest
0 голосов
/ 02 марта 2019

В общем, как мне использовать Pyserial, чтобы определить, используется ли последовательный порт другим приложением?

Показательный пример: Если мое последовательное устройство /dev/ttyUSB0в настоящее время доступ к приложению.Например, picocom /dev/ttyUSB0 -b 115200 запущено (но это могут быть и другие приложения).Затем я использую Pyserial для доступа к тому же последовательному порту.Я ожидаю, что serial.Serial.read() выдаст исключение SerialException в соответствии с методом read .Однако этого не произошло.

Ниже приведен мой тестовый скрипт, и его результат показывает read_data = b'', но SerialException не был запущен.

Скрипт:

import serial
from pprint import pprint

port='/dev/ttyUSB0'
try:
    serial_port = serial.Serial(port=port, baudrate=115200, timeout=5 )
    read_data = serial_port.read()
#except serial.serialutil.SerialException as e:
except serial.SerialException as e:
    print(e)
else:
    print('serial_port:'); pprint(serial_port.__dict__)
    print('\nread_data = ', read_data)
    if not read_data:
        print("read_data == zero or empty container or False")

serial_port.close()

Выход:

serial_port:
{'_baudrate': 115200,
 '_break_state': False,
 '_bytesize': 8,
 '_dsrdtr': False,
 '_dtr_state': True,
 '_exclusive': None,
 '_inter_byte_timeout': None,
 '_parity': 'N',
 '_port': '/dev/ttyUSB0',
 '_rs485_mode': None,
 '_rts_state': True,
 '_rtscts': False,
 '_stopbits': 1,
 '_timeout': 5,
 '_write_timeout': None,
 '_xonxoff': False,
 'fd': 6,
 'is_open': True,
 'name': '/dev/ttyUSB0',
 'pipe_abort_read_r': 7,
 'pipe_abort_read_w': 8,
 'pipe_abort_write_r': 9,
 'pipe_abort_write_w': 10,
 'portstr': '/dev/ttyUSB0'}

read_data =  b''
read_data == zero or empty container or False
...