Python проверяет ввод с консоли и последовательный порт одновременно?

Я пишу приложение python, которое читает ввод пользователя (из консоли) :

buff = raw_input('Enter code: ') 

и генерирует и выводит на основе серии алгоритмов.

Проблема заключается в том, что приложение также подключается через последовательный порт к другой машине, которая устанавливает некоторые атрибуты конфигурации состояния. Чтобы прочитать строку из последовательного (COM) порта, я использую библиотеку PySerial:

 ser = serial.Serial('/dev/ttyAMA0') ser.baudrate = 115200 [...] if not(ser.isOpen()): ser.open() s = ser.readline() 

Как я могу проверить оба входа одновременно ? raw_input () останавливает выполнение программы до тех пор, пока не будет отправлена ​​строка, поэтому предотвращает проверку того, что в течение этого времени что-то отправляется через последовательный порт . То же самое происходит при ожидании ввода из последовательного порта.

Я бы хотел избежать многопоточности (код работает на RaspberryPi ), поскольку он, вероятно, добавит чрезмерный уровень сложности.

БЛАГОДАРЯ! MJ

One Solution collect form web for “Python проверяет ввод с консоли и последовательный порт одновременно?”

Выберите ваш друг Пример взяты отсюда

 import sys import select import time # files monitored for input read_list = [sys.stdin] # select() should wait for this many seconds for input. # A smaller number means more cpu usage, but a greater one # means a more noticeable delay between input becoming # available and the program starting to work on it. timeout = 0.1 # seconds last_work_time = time.time() def treat_input(linein): global last_work_time print("Workin' it!", linein, end="") time.sleep(1) # working takes time print('Done') last_work_time = time.time() def idle_work(): global last_work_time now = time.time() # do some other stuff every 2 seconds of idleness if now - last_work_time > 2: print('Idle for too long; doing some other stuff.') last_work_time = now def main_loop(): global read_list # while still waiting for input on at least one file while read_list: ready = select.select(read_list, [], [], timeout)[0] if not ready: idle_work() else: for file in ready: line = file.readline() if not line: # EOF, remove file from input list read_list.remove(file) elif line.rstrip(): # optional: skipping empty lines treat_input(line) try: main_loop() except KeyboardInterrupt: pass 
  • Непрерывный цикл считывания PySerial
  • Невозможно открыть последовательное соединение в Pyserial: "termios.error: (22, 'Invalid argument')"
  • Использование QThread в PyQT для последовательной связи (w. Pyserial)
  • pySerial 2.6: указать конец строки в readline ()
  • pySerial очень странное поведение ... Код работает, когда выполняется в оболочке, но не в скрипте
  • Виртуальное последовательное устройство в Python?
  • Потеря данных в полученной последовательной строке
  • pySerial данные, полученные от XBee, не отображаются должным образом
  • pyserial для Python 2.7.2
  • Python 3 неблокирует чтение с pySerial (не может получить свойство «in_waiting» pySerial для работы)
  • Python Pyserial Windows No Port Found
  • Python - лучший язык программирования в мире.