Python sys.stdin.read (1) через некоторое время (True) цикл последовательно выполняет 1 раз ввода ввода и несколько раз не получает ввода

Я запускаю python 2.7 на 64-битной Windows 7.

Вот код, который я выполняю:

import sys while True: print 'please enter a character:' c = sys.stdin.read(1) print 'you entered', str(c) 

В среде PyDev в eclipse я получаю следующий вывод для ввода a, а затем b.

 please enter a character: a you entered a please enter a character: you entered please enter a character: you entered please enter a character: b you entered b please enter a character: you entered please enter a character: you entered please enter a character: 

Он правильно получает вход один раз, а затем выполняет дважды пропускание пользовательского ввода.

Теперь, когда я запускаю тот же код в терминале python для ввода a и b, я получаю следующий вывод:

 enter char a you entered a enter char you entered enter char b you entered b enter char you entered enter char 

Это выполняется после получения пользовательского ввода и после пропуска ввода пользователя.

Что вызвало бы эту проблему? Как заставить Python читать один символ за раз в бесконечном цикле?

2 Solutions collect form web for “Python sys.stdin.read (1) через некоторое время (True) цикл последовательно выполняет 1 раз ввода ввода и несколько раз не получает ввода”

Проблема, вероятно, связана с промывкой stdin, так как \n задерживается.

в качестве альтернативы используйте raw_input

 while True: c = raw_input('please enter a character: ') print 'you entered', c 

Для промывочной части см. Это

sys.stdin по умолчанию буферизируется по строке, т. е. ваш sys.stdin.read(1) не вернется, пока не будет полная строка в буфере stdin.

Это означает, что если вы введете символ и нажмите Enter, то после того, как вы получите первый символ с sys.stdin.read(1) , в буфере есть os.linesep (один или два символа: os.linesep ), которые сразу читаются на следующие итерации цикла.

Вы можете не нажимать Enter , читая ровно один символ за раз ( msvcrt.getch() ).

  • Надежный способ выполнения тысяч независимых транзакций?
  • Установка и импорт модулей Python на OS X
  • Приложите нос @attr к названию теста
  • Общий доступ к объектам Python
  • Python Как получить значения, которые находятся в одном фрейме данных, но не в секундах
  • Отправлять аудио-сокеты в python с помощью TCP
  • Графирование параболы с использованием Matplotlib в Python
  • django - модель unicode () показать атрибут объекта foreignkey
  • Python - лучший язык программирования в мире.