如何等待用户按任意键20秒?即我显示消息并计数20秒,如果通过20秒或者如果用户按下任何键,则代码继续执行。我如何用python来做到这一点?如何等待20秒让用户按任意键?
回答
如果您使用的是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
这是一个小琐事,但如果有人在过程中击中一个字符睡眠,你无缘无故等待。最好比较时间而不是睡眠。 – Logan 2012-08-02 19:29:44
你说得对。更新以比较时间。 – 2012-08-02 20:33:47
(警告:未经测试的代码)
喜欢的东西:
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"
我不知道选择模块,这是很好的了解。我只是在Windows上测试它,并没有奏效。从文档: 注意:Windows上的文件对象不可接受,但套接字是。在Windows上,底层的select()函数由WinSock库提供,并且不处理源自WinSock的文件描述符。 – 2012-08-02 19:21:08
@BrendenBrown:哇,我不知道。感谢您的更新(这进一步加剧了我在Windows开发中的困惑......) – gsk 2012-08-02 19:22:23
一种可能解决方案是使用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
- 1. “按任意键或等待10秒钟继续”
- 2. 等待按键(或)N秒到期
- 3. 如何让JButton等待一秒?
- 4. C#:我如何等待10秒让客户端调用方法?
- 5. Cloudflare等待超过20秒的时间
- 6. ALTER DATABASE [...] WITH NO_WAIT SET SINGLE_USER等待20秒
- 7. Pygame等待用户按下一个键
- 8. 如何让java等待用户输入?
- 9. 如何让GUI等待用户输入?
- 10. 如何取消预输入等待毫秒的按键
- 11. 按任意键在5秒内中止
- 12. cv2.waitKey(0)没有等待按下任意键 - OpenCV 3.1.0,Python3,Ubuntu
- 13. 在Python 3.3.2中,如何让代码等待用户按下“w”键?
- 14. 等待Java按键
- 15. 如何等待用户按下输入
- 16. 如何等待2秒
- 17. UNITY - 如何让团结等待,直到我按下我的键
- 18. 如何在继续之前让Tkinter等待按键?
- 19. C#如何每隔几分钟/秒按下任意键盘按键?
- 20. 如何等待R中的按键?
- 21. winphone让代码等待DispatcherTimer2秒
- 22. 等待3秒钟或用户点击
- 23. 用Windows C在不同的线程中等待“任意键”
- 24. 等待特定按键
- 25. 在Tkinter的等待按键
- 26. 如何让对象等待几毫秒,然后在等待时间内取消主动等待?
- 27. 让用户等待使用Swing
- 28. 如何让WebBrowser等待Javascript?
- 29. 如何让JS等待...?
- 30. 如何让java等待
采取查找非阻塞输入,然后实现在while循环中检查当前时间与开始时间的比较。 – Lanaru 2012-08-02 19:10:45
@Lanaru:为什么一段时间循环?听起来像是忙碌等待的糟糕情况。类似'select()'的超时可以做同样的事情。 – gsk 2012-08-02 19:14:20
_press任何key_不等于_input任何string_ – moooeeeep 2012-08-02 19:22:35