Python sys.stdin.read(1)in a while(True)循环一致地执行1次获取输入和多次不获取inpu

2024-04-26 03:35:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 代码用户importyoutruestdinsysprint
2条回答

问题可能是由于stdin的刷新,因为\n一直存在。

另一种方法是使用^{}

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

冲洗部分见this

默认情况下,sys.stdin是行缓冲的,也就是说,在stdin缓冲区中有整行之前,sys.stdin.read(1)不会返回。

这意味着,如果输入一个字符并按回车键,那么在使用sys.stdin.read(1)获得第一个字符后,缓冲区中会有一个新行(一个或两个字符:os.linesep),在下一个循环迭代中会立即读取。

通过reading exactly one character at a timemsvcrt.getch()),您可以避免按回车键。

相关问题 更多 >

    热门问题