超时后重置用户提示

时间:2016-04-25 06:05:31

标签: python user-interface python-3.x

我正在处理需要执行以下方案的问题:

我将提示用户输入屏幕(控制台窗口)。当提示显示为基本的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"按键被提交输入,我不知道如何强制覆盖输入或只是让看门狗超时并继续前进。

此外,似乎在睡眠时间内没有接受用户输入。这是真的吗?

1 个答案:

答案 0 :(得分:0)

如果你在unix上运行,只需使用" signal.alarm"函数,否则你可以使用像windows这样的代码:

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

而不是返回"无"你可以提出错误或任何你想要的......