如何等待用戶按任意鍵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