我在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?
答案 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 time(os.linesep
)点击 Enter 。