Неблокирующий ввод в 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 данные для чтения.
Я бы предпочел не использовать тяжелые решения, такие как многопоточность или подпроцессы.