2016-04-25 47 views
0

我正在處理需要執行以下場景的問題:超時後重置用戶提示

我將提示輸入屏幕(控制檯窗口)的用戶輸入。當提示顯示爲基本的Y/N問題時,我需要a)接受用戶對提示的用戶輸入響應並繼續或b)等待預設時間,然後將提示重置爲先前的值,以先到者爲準。想想一下如果用戶走開並且你有想法,需要重新設置一個信息亭。

似乎我的邏輯(下面的僞Python)在用戶輸入剛好在那裏等待用戶回覆,而不是在一段時間後重置用戶後放棄用戶輸入時,會延遲時間。

UserInput = input("prompt. y/n?") 
if UserInput == "y": 
    Do something to move on 
elif UserInput != "y": 
    time.sleep(dwell) 
    Do something to reset 

如果用戶正在積極關注,那麼我現在擁有的每件東西現在都可以正常工作。但是,我有一種感覺,在按下「Enter」鍵提交輸入時,所有內容都在關注,我不知道如何強制重寫輸入,或者只是讓看門狗超時並隨之移動。

而且,似乎在休眠時間內沒有用戶輸入被接受。真的嗎?

回答

0

如果您在UNIX上運行只需使用「signal.alarm」功能,否則,你可以使用這樣的代碼窗口:

import msvcrt 
import time 

def raw_input_with_timeout(prompt, timeout=30.0): 
    print prompt,  
    finishat = time.time() + timeout 
    result = [] 
    while True: 
     if msvcrt.kbhit(): 
      result.append(msvcrt.getche()) 
      if result[-1] == '\r': # or \n, whatever Win returns;-) 
       return ''.join(result) 
      time.sleep(0.1)   # just to yield to other processes/threads 
     else: 
      if time.time() > finishat: 
       return None 

,而不是返回「無」,你可能會引發錯誤或無論你想要什麼...