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