我在64位Windows7上运行Python2.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在无限循环中一次读取一个字符?
问题可能是由于stdin的刷新,因为
\n
一直存在。另一种方法是使用^{}
冲洗部分见this
默认情况下,
sys.stdin
是行缓冲的,也就是说,在stdin缓冲区中有整行之前,sys.stdin.read(1)
不会返回。这意味着,如果输入一个字符并按回车键,那么在使用
sys.stdin.read(1)
获得第一个字符后,缓冲区中会有一个新行(一个或两个字符:os.linesep
),在下一个循环迭代中会立即读取。通过reading exactly one character at a time(
msvcrt.getch()
),您可以避免按回车键。相关问题 更多 >
编程相关推荐