Python получает raw_input, но вручную решает, когда будет выполнена строка - PullRequest
5 голосов
/ 04 мая 2010

Я хочу, чтобы кто-то печатал слова в консоли и выполнял автозаполнение из списка при нажатии клавиши «Tab». Однако raw_input не вернет строку, пока кто-нибудь не нажмет [Enter].

Как читать символы в переменную, пока пользователь не нажмет [Enter]?

* Примечание. Я не хочу использовать import readline для автозаполнения из-за проблем с ОС.

Ответы [ 2 ]

5 голосов
/ 04 мая 2010

Для Unix существует официальная запись FAQ по этому вопросу: http://www.python.org/doc/faq/library/#how-do-i-get-a-single-keypress-at-a-time

Редактировать (скопировано из комментария Donal Fellows ниже): «Проблема в том, что терминал находится в« готовом »режиме по умолчанию (допускает простое редактирование строки) и что ключи получают по мере их появления» Повторно напечатанный, это должно быть помещено в "сырой" способ. " (Спасибо!)

1 голос
/ 04 мая 2010

В * nix используйте select в sys.stdin для ожидания символа, затем .read() в нем. В Windows используйте msvcrt.kbhit() и msvcrt.getch().

...