如何等待20秒让用户按任意键?

时间:2012-08-02 18:51:30

标签: python python-2.5

如何等待用户按任意键20秒?即我显示消息并计算20秒,如果通过20秒或者如果用户按任意键,代码将继续执行。我怎么能用python做到这一点?

3 个答案:

答案 0 :(得分:7)

如果你在Windows上:

def wait_for_user(secs):
    import msvcrt
    import time
    start = time.time()
    while True:
        if msvcrt.kbhit():
            msvcrt.getch()
            break
        if time.time() - start > secs:
            break

答案 1 :(得分:2)

一种可能的解决方案是使用select检查值,但我不喜欢它,我觉得我在浪费时间。
另一方面,您可以在Linux系统上使用信令来处理该问题。在一段时间后,将引发异常,try失败并且代码在except中继续:

import signal

class AlarmException(Exception):
    pass

def alarmHandler(signum, frame):
    raise AlarmException

def nonBlockingRawInput(prompt='', timeout=20):
    signal.signal(signal.SIGALRM, alarmHandler)
    signal.alarm(timeout)
    try:
        text = raw_input(prompt)
        signal.alarm(0)
        return text
    except AlarmException:
        print '\nPrompt timeout. Continuing...'
    signal.signal(signal.SIGALRM, signal.SIG_IGN)
    return ''

代码取自here

答案 2 :(得分:0)

(警告:未经测试的代码)

类似的东西:

 import sys
 import select

 rlist, _, _ = select.select([sys.stdin], [], [], timeout=20)
 if len(rlist) == 0:
     print "user didnt input anything within 20 secs"
 else:
     print "user input something within 20 secs. Now you just have to read it"

修改,请参阅:http://docs.python.org/library/select.html