Неблокирующий ввод в Python 3

Я хотел бы кросс-платформенный способ читать входные данные из стандартного ввода неблокирующим способом.

Примерно так (как это делают неблокирующие сокеты):

while True
    try:
        string = input("> ")
    except BlockingIOError:
        pass
    else:
        print(f"you typed {string}")

Я не спрашиваю о сыром режиме против приготовленного режима. Приготовленный режим - это стандартное поведение терминала, строка которого буферизует stdin, необработанный режим делает символы доступными для входного потока по мере их ввода.

То, что я хотел бы, это независимый от платформы способ чтения из stdin и не блокировать его, если еще нет данных для чтения. Опять же, мне не нужно нажимать клавишу ВВОД, чтобы сделать символы доступными для потока. Я просто не хочу, чтобы программа полностью остановилась, когда в stdin ничего нет.

Я также был бы счастлив с асинхронным подходом. Или что-то, что выдает ошибку BlockingIOError, как в моем примере выше. Или что-то наподобие Java Scanner.hasNextLine(), который возвращает bool, представляющий, есть ли у stdin данные для чтения.

Я бы предпочел не использовать тяжелые решения, такие как многопоточность или подпроцессы.

0 ответов

Другие вопросы по тегам