在一个while(True)循环中的Python sys.stdin.read(1)始终执行1次获取输入并且多次未获得输入

时间:2013-03-17 19:18:30

标签: python python-2.7

我在64位Windows 7上运行python 2.7。

这是我正在执行的代码:

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

在eclipse的PyDev环境中,我得到输入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在无限循环中一次读取一个char?

2 个答案:

答案 0 :(得分:3)

问题可能是由于\n徘徊而导致stdin的刷新。

作为替代方案,请使用raw_input

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

有关冲洗部分,请参阅this

答案 1 :(得分:2)

默认情况下,

sys.stdin是行缓冲的,即您的sys.stdin.read(1)不会返回,直到stdin缓冲区中有实线为止。

这意味着如果您输入一个字符然后点击 Enter 然后在获得第一个带有sys.stdin.read(1)的字符后,缓冲区中会有一个换行符(一个或两个字符:{{1在下一个循环迭代中立即读取。

您可以避免按reading exactly one character at a timeos.linesep)点击 Enter