如何等待用户按任意键 20 秒?即我显示消息并且它计数 20 秒,如果经过 20 秒或如果用户按下任何键,代码将继续执行。我怎样才能用python做到这一点?
问问题
995 次
3 回答
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
于 2012-08-02T19:15:52.787 回答
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 ''
代码取自这里
于 2012-08-02T19:26:57.337 回答
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"
于 2012-08-02T19:17:38.820 回答