Оценка ввода с тайм-аутом sys.stdin
** В этом коде я принимал ввод от пользователя с ограничением по времени 5 секунд.**
i, o, e = select.select([sys.stdin], [], [], 5)
if (i):
print("Typed :" + sys.stdin.readline().strip())
else:
print("5 seconds passed !")
Мне было интересно, как я могу оценить вход и действовать соответственно, например
i, o, e = select.select([sys.stdin], [], [], 5)
if (i):
if(sys.stdin.readline().strip() == "exit"):
#Dosomeaction
else:
print("Typed :" + sys.stdin.readline().strip())
else:
print("5 seconds passed !")
Дополнительная справка (необязательно!!!)
Я пытаюсь создать приложение, которое можно сравнить с приложением для обмена сообщениями:
read (): читать из текстового файла сообщения
takeInput(): принять ввод от пользователя и сохранить его в текстовом файле
Я немного новичок в python, поэтому я хочу обновить сообщения (вызывать функцию read () несколько раз), одновременно принимая данные от пользователя, например, приложение мессенджера. В приложении обмена сообщениями функция ввода отделена от раздела, в котором появляются сообщения (функция чтения).
Я попытался вызвать takeInput() в конце read () и наоборот, и это сработало, но был недостаток.
Так как я запускаю свой скрипт в терминале, если бы мне потребовалось ввести более 5 секунд для записи в терминальной оболочке, то была бы вызвана функция read () и напечатанное сообщение исчезнет (из-за способа, которым я написал функцию read (), но все равно будет "сохранен", когда я нажму Enter. До тех пор, пока read () не будет вызван снова, весь ввод (старый, который исчез, добавленный с остальным, записанным на обновленном терминале) правильно сохраняется в текстовом файле.
Таким образом, идеальным сценарием будет ввод, который займет у человека менее 5 секунд, чтобы его напечатать.
Проблема: даже если я предоставлю ввод, который займет у меня менее 5 секунд. Если я хочу изменить его по какой-то причине, у пользователя практически не остается времени, чтобы изменить сообщение. И если бы я увеличил время ожидания int до 10 секунд или более, это привело бы к очень медленной частоте обновления (вызывая read () каждые 10 секунд)
Проблема понятна. Есть идеи, как это исправить? Может быть параллельная обработка? Или, может быть, мы могли бы разделить функции read () и TakeInput() (поэтому нам не нужно ограничение по времени в функции takeInput(), потому что она всегда будет доступна, а read () будет в бесконечном цикле, чтобы всегда обновлять сообщения)