Оценка ввода с тайм-аутом sys.stdin - PullRequest
0 голосов
/ 15 января 2019

** В этом коде я принимал ввод от пользователя с ограничением по времени 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 () * Функция 1056 *, потому что она всегда будет доступна, а read () будет в бесконечном цикле, чтобы всегда обновлять сообщения)

...