Я пишу программу на Python для запуска на моей малине Pi. Как известно многим, малина может получать множество способов ввода. Я использую клавиатуру и другой внешний источник ввода. Это просто для контекстуализации, а не для самого вопроса.ввод клавиатуры с таймаутом и без нажатия введите
В моей программе я жду ввода клавиатуры, и если в течение короткого периода времени ее нет, я пропускаю и просматриваю входной сигнал другого источника. Для того, чтобы сделать это, я использую следующий код:
import sys
import time
from select import select
timeout = 4
prompt = "Type any number from 0 up to 9"
default = 99
def input_with(prompt, timeout, default):
"""Read an input from the user or timeout"""
print prompt,
sys.stdout.flush()
rlist, _, _ = select([sys.stdin], [], [], timeout)
if rlist:
s = int(sys.stdin.read().replace('\n',''))
else:
s = default
print s
return s
я собираюсь запустить Raspberry Pi без полной клавиатуры, это означает, что я не буду иметь ключ возврата. Таким образом невозможно будет проверить ввод клавиатуры.
Мое сомнение в том, что можно получить ввод пользователя без нажатия клавиши ввода и сохранения таймаута для ввода.
Я видел много тем, говорящих обо всех проблемах (тайм-аут и ввод без нажатия возврата), но ничего не происходит вместе.
Заранее благодарим за любую помощь!
Это интересный вопрос. 'stdin' не работает так, это строка за строкой. Вы должны смотреть на захват tty прямо так или иначе. Подумайте, как при вводе пароля при входе в систему, как он обходит stdin. – robert
[Простота адаптации 'readchar' для принятия параметра timeout' (https://github.com/magmax/python-readchar/blob/e020e152f1787074ef915e50f46c407ca8ac355b/readchar/readchar_linux.py). Это взято из [ответа] (http://stackoverflow.com/a/25342814/4279) на [Python читает один символ от пользователя] (http://stackoverflow.com/q/510357/4279) – jfs