1. ホーム
  2. python

[解決済み] キーボード入力でタイムアウト?

2022-02-08 03:58:22

質問

ユーザーに入力を促し、N秒後にタイムアウトさせるにはどうしたらよいでしょうか?

Googleは、それに関するメールのスレッドを次のように紹介しています。 http://mail.python.org/pipermail/python-list/2006-January/533215.html が、うまくいかないようです。タイムアウトが発生する文は、それが sys.input.readline または timer.sleep() , いつも出る。

<type 'exceptions.TypeError'>: [raw_]input expected at most 1 arguments, got 2

をキャッチすることができません。

どうすればいいですか?

リンク先の例は間違っており、実際にはブロックの読み込み時ではなく、アラームハンドラの呼び出し時に例外が発生しています。これを試してみてください。

import signal
TIMEOUT = 5 # number of seconds your want for timeout

def interrupted(signum, frame):
    "called when read times out"
    print 'interrupted!'
signal.signal(signal.SIGALRM, interrupted)

def input():
    try:
            print 'You have 5 seconds to type in your stuff...'
            foo = raw_input()
            return foo
    except:
            # timeout
            return

# set alarm
signal.alarm(TIMEOUT)
s = input()
# disable the alarm after success
signal.alarm(0)
print 'You typed', s