1

我在 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 在无限循环中一次读取一个字符?

4

2 回答 2

3

问题可能是由于标准输入的冲洗,因为\n徘徊。

作为替代方案,使用raw_input

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

对于冲洗部分,请参阅this

于 2013-03-17T19:28:07.820 回答
2

sys.stdin默认情况下是行缓冲的,即在标准输入缓冲区中有完整行sys.stdin.read(1)之前,您不会返回。

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

Enter您可以通过一次只读取一个字符来避免命中( msvcrt.getch())。

于 2014-04-07T19:18:23.480 回答