ユーザーが答えていない場合は、メインスレッドをブロックするために許容可能である場合:それ以外の場合は
from threading import Timer
timeout = 10
t = Timer(timeout, print, ['Sorry, times up'])
t.start()
prompt = "You have %d seconds to choose the correct answer...\n" % timeout
answer = input(prompt)
t.cancel()
を、あなたが使用することができ@Alex Martelli's answer (テストされていない)Windows(テストされていない)上の(Python 3用に修正された):
import msvcrt
import time
class TimeoutExpired(Exception):
pass
def input_with_timeout(prompt, timeout, timer=time.monotonic):
sys.stdout.write(prompt)
sys.stdout.flush()
endtime = timer() + timeout
result = []
while timer() < endtime:
if msvcrt.kbhit():
result.append(msvcrt.getwche()) #XXX can it block on multibyte characters?
if result[-1] == '\n': #XXX check what Windows returns here
return ''.join(result[:-1])
time.sleep(0.04) # just to yield to other processes/threads
raise TimeoutExpired
使用法: Unixでは
try:
answer = input_with_timeout(prompt, 10)
except TimeoutExpired:
print('Sorry, times up')
else:
print('Got %r' % answer)
あなたは試みることができる:
import select
import sys
def input_with_timeout(prompt, timeout):
sys.stdout.write(prompt)
sys.stdout.flush()
ready, _, _ = select.select([sys.stdin], [],[], timeout)
if ready:
return sys.stdin.readline().rstrip('\n') # expect stdin to be line-buffered
raise TimeoutExpired
または:私はすでに私の質問を投稿する前に、この投稿を読ん
import signal
def alarm_handler(signum, frame):
raise TimeoutExpired
def input_with_timeout(prompt, timeout):
# set signal handler
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(timeout) # produce SIGALRM in `timeout` seconds
try:
return input(prompt)
finally:
signal.alarm(0) # cancel alarm
出典
2013-03-20 19:55:15
jfs
@interjayを。まず第一に、UnixではなくWindowsプラットフォームです。受け入れられた答えはそれがUnixだけだと言います、そして、私はそれは後でそれが働いていないと答えた人が信じています。また、私はPython 3で作業しています。私はraw_inputではなくinputを使う必要があります。 – cloud311
この質問とFrancesco Frassinelliが投稿した質問には複数の回答があり、その多くはUnix専用ではありません。そして、単に 'raw_input'を' input'に変更することができます。 BTW質問をするときは、Windowsで実行するなどの関連情報を指定する必要があります。また、試したが解決しなかったソリューションを使用して、古い回答を書き換える時間を無駄にしないようにします。 – interjay
[キーボード入力とタイムアウトのPython](http://stackoverflow.com/q/1335507/4279) – jfs