在while(True)循环中,Python sys.stdin.read(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在无限循环中每次读取一个字符?
2 个回答
2
sys.stdin
默认是按行缓存的,也就是说,当你使用 sys.stdin.read(1)
时,它不会返回结果,直到输入的内容形成了一整行。
这意味着,如果你输入一个字符并按下 Enter,那么在你用 sys.stdin.read(1)
获取第一个字符后,缓冲区里会有一个换行符(可能是一个或两个字符:os.linesep
),这些换行符会在下一次循环时立刻被读取。
如果你想避免按 Enter,可以通过一次读取一个字符的方式来实现(使用 msvcrt.getch()
)。