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() ).

  • Можно ли правильно обрабатывать ошибки синтаксиса?
  • traitlets.traitlets.TraitError в Пичарме
  • multiprocessing.Pool в ноутбуке jupyter работает на Linux, но не на окнах
  • fmin_cg: Желаемая ошибка не всегда достигается из-за потери точности
  • Удаление специальных символов из csv-файла с помощью python
  • python игнорировать сертификат подтверждения urllib2
  • Почему соединение тупика при использовании с несколькими подпроцессами Popen?
  • Список Python больше числа
  • Самый быстрый способ «grep» больших файлов
  • Нарисовать самую длинную линию в контурах OPENCV
  • PySide передает сигналы из QThread в слот в другом QThread
  • Python - лучший язык программирования в мире.