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 
  • писериальная связь с ардуино (для управления двигателем)
  • Как автоматически получить номер порта. аппаратного обеспечения в python serial communcation?
  • pyserial serialwin32.py имеет ошибку атрибута
  • Проблема с PySerial и несколькими установками Python
  • Использование pySerial с Python 3.3
  • Повторное подключение к устройству с помощью pySerial
  • Список доступных COM-портов с Python
  • Использование QThread в PyQT для последовательной связи (w. Pyserial)
  • Python - лучший язык программирования в мире.