キーボードからの入力を取得するためにいくつかのコードを記述し、何かが生きているかどうかも確認します。
import sys
from select import select
timeout = 10
while is_alive(): # is_alive is a method to check some stuffs, might take 5 secs
rlist, _, _ = select([sys.stdin], [], [], timeout)
if rlist:
s = sys.stdin.readline()
print repr(s)
handle(s) # handle is a method to handle and react according to input s
キーボード入力が待機時間外に終了するとselect()
(通常は5秒間で終了しますis_alive()
)、はif rlist:
falseになることがわかりました。
理由はわかりますが、解決方法がわかりません。
また、上記の状況に関連する別の質問があります。readline()
一部の入力が異なるselect()
待機中に配置されている場合、入力の最後の行が返されることがあります。
つまり、「abc \ n」と入力し、残念ながら「\ n」を入力するとselect()
(つまり、Enterキーを押すと、プログラムはなどの他の部分を実行します)、 「def」is_alive()
と入力すると\ n'そして今度はEnterキーが正常に押されたselect()
ので、s
fromreadline()
が' def \ n'になり、最初の行が消えます。
上記の2つの問題を解決するための良い解決策はありますか?私はFreeBSD9.0を使用しています。