ターミナルで入力を取得し、応答するのに数秒だけ与えたいです。タイムアウトに達したら、入力されたものをすべて読み取り、指定された入力として受け入れたいと思います。オプションで、ユーザーが「Enter」を押して回答を早めに送信できるようにしたいと考えています。
以下のコードは問題なく動作しますが、送信するにはユーザーが「Enter」を押す必要があります。バグがあります: テキストを入力してからタイムアウトを待つと、テキストが「バッファ」に保持されます。次に、プロンプトが再度表示されたら、別のテキストを入力し、Enter キーを押すと、両方の文字列が出力されます (出力を参照)。タイムアウトに達したら、入力されたものを「回答」として受け入れたいと思います。「Enter」を押すことで、ユーザーが回答をより速く送信できるようにしたいと思います。
目的の動作を実現する方法はありますか?
注: Mac OS X を使用しています
import sys
from select import select
def getResponse(timeout):
print "Enter something:"
rlist, wlist, xlist = select([sys.stdin], [], [], timeout)
if rlist:
result = sys.stdin.readline()
return result
else:
return ''
while True:
response = getResponse(3)
print "Your input is:", response
出力:
Enter something:
pythonYour input is:
Enter something:
dangit
Your input is: pythondangit