循环中具有超时的用户输入

use*_*113 10 python raw-input keyboardinterrupt python-2.7

我正在尝试创建一个循环python函数,它执行任务并提示用户进行响应,如果用户在给定时间内没有响应,则序列将重复.

这是基于这个问题:如何设置raw_input的时间限制

任务由...表示some_function().超时是一个变量,以秒为单位.我有以下代码的两个问题:

  1. 无论用户是否提示,raw_input提示在指定的4秒时间后都不会超时.

  2. 当输入'q'的raw_input时(没有'',因为我知道键入的任何内容会自动输入为字符串),该函数不会退出循环.

`

import thread
import threading
from time import sleep

def raw_input_with_timeout():
    prompt = "Hello is it me you're looking for?"
    timeout = 4
    astring = None
    some_function()
    timer = threading.Timer(timeout, thread.interrupt_main)
    try:
        timer.start()
        astring = raw_input(prompt)
    except KeyboardInterrupt:
        pass
    timer.cancel()
    if astring.lower() != 'q':
        raw_input_with_timeout()
    else:
        print "goodbye"
Run Code Online (Sandbox Code Playgroud)

`

Art*_*aks 0

我不认为有一种方法可以显示一段时间后将过期的提示,而不显示来自另一个线程的不同消息。

您可以在调用 raw_input 之前添加以下行:

 thread.start_new_thread(interrupt_user,())
Run Code Online (Sandbox Code Playgroud)

interrupt_user您可以按如下方式定义该函数:

sleep(5)
print "\nTime up"
Run Code Online (Sandbox Code Playgroud)

raw_input_with_time函数中,不要调用sleep。相反,保存调用 raw_input 之前的时间,并确定调用之后经过的时间是否超过 5 秒。另外,如果用户输入“q”,那么它不应该调用自身,因此循环将停止。