【发布时间】:2016-01-26 16:02:54
【问题描述】:
问题
执行这两个函数时与 STDIN 冲突。什么会导致第二个函数无法正确读取 STDIN?如果第一个函数未执行,则第二个函数读取输入没有问题。
我尝试过清除 STDIN 缓冲区:
'sys.stdin.flush'
'tcflush(sys.stdin, TCIOFLUSH)'
Python 代码
import sys, select
def stdin_read():
print "[stdin read] You must answer Y/N and press ENTER"
sys.stdout.flush()
response = sys.stdin.read(1)
print "You said '{}'".format(response)
def stdin_timeout():
print "[stdin timeout] You must answer YES / NO in 10 seconds and press ENTER"
sys.stdout.flush()
sys.stdin.flush()
i, o, e = select.select( [sys.stdin], [], [], 10 )
if (i):
print "You said '{}'".format(sys.stdin.readline().strip())
exit(0)
else:
print "You said nothing!"
exit(1)
stdin_read()
stdin_timeout()
Python 输出两个函数:
:~# python input.py
[stdin read] You must answer Y/N and press ENTER
n
You said 'n'
[stdin timeout] You must answer YES / NO in 10 seconds and press ENTER
no
You said ''
:~# no
-bash: no: command not found
Python 输出第二个函数
~# python input.py
[stdin timeout] You must answer YES / NO in 10 seconds and press ENTER
no
You said 'no'
【问题讨论】: