перенаправить вывод из интерфейса?

перенаправить вывод из интерфейса?

Я отправляю AT-команду на модемный интерфейс ( /dev/ttyUSB3), и команда выполняется успешно.

Например, следующая команда работает и дает следующий вывод OK:

echo -e "ATZ\r" > /dev/ttyUSB3

Я могу это увидеть, имея другой терминал с cat /dev/ttyUSB3активным.

Как мне вместо использования cat(например, использования одной команды для отправки команды и получения обратно вывода) перенаправить вывод OKв переменную или файл, чтобы я мог обработать данные, возвращаемые модемом?

решение1

Вы должны использовать последовательное устройство так же, как и обычный файл. Единственное отличие в том, что ему нужны некоторые ioctl() для настройки скорости и линии управления.

Поэтому не используйте os.system("echo... но f = open('/dev/ttyUSB3', 'rw')и затем f.write()и f.read().

Теоретически вы можете использовать его ioctl()для установки скорости и т. д., но на этом этапе проще использовать pySerial, чем выполнять всю обработку параметров самостоятельно. ser = serial.Serial(port='/dev/ttyUSB3', baudrate=9600, timeout=1, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)с помощью ser.write()и ser.read().

Обратите внимание, что вам следует использовать udev для установки уникального имени последовательного порта, а не жестко кодировать /dev/ttyUSB3. Вот как это сделать дляодин адаптер USB/RS-232и вот как это сделать длямногопортовый адаптер USB/RS-232.

решение2

read modem_output < /dev/ttyUSB3

Связанный контент