首页 > 后端开发 > Python教程 > 如何在Python中实现用户输入的时间限制?

如何在Python中实现用户输入的时间限制?

Patricia Arquette
发布: 2024-11-16 17:42:03
原创
972 人浏览过

How to Implement a Time Limit for User Input in Python?

如何在 Python 中实现用户输入的时间限制

在使用 raw_input() 函数时,您可能会遇到您希望的情况在预定义的持续时间后终止输入。幸运的是,Python 提供了多种解决方案来满足此要求。

Unix 专用方法:

@jer 的建议利用 signal.alarm 函数,该函数仅在 Unix 上可用系统。当达到指定的超时时,此函数将引发 KeyboardInterrupt 异常。以下代码举例说明了此方法:

import signal

def raw_input_with_timeout(prompt, timeout):
    signal.alarm(timeout)
    try:
        return input(prompt)
    except KeyboardInterrupt:
        return None
    finally:
        signal.alarm(0)  # Reset alarm to avoid interference
登录后复制

跨平台和特定于 Windows 的方法:

对于跨平台或特定于 Windows 的解决方案,请考虑使用threading.Timer 类以及 thread.interrupt_main。此方法从计时器线程向主线程发送键盘中断。下面的代码说明了此方法:

import threading

def raw_input_with_timeout(prompt, timeout):
    print(prompt, end=' ')
    timer = threading.Timer(timeout, thread.interrupt_main)
    result = None
    try:
        timer.start()
        result = input(prompt)
    except KeyboardInterrupt:
        pass
    timer.cancel()
    return result
登录后复制

Windows 特定方法(未经测试):

在 Windows 环境中,可以使用 msvcrt 来实现超时。此方法涉及在紧密循环内轮询按键并累积输入,直到达到最大时间或检测到换行符。

import msvcrt
import time

def raw_input_with_timeout(prompt, timeout):
    print(prompt, end=' ')
    finishat = time.time() + timeout
    result = []
    while True:
        if msvcrt.kbhit():
            result.append(msvcrt.getche())
            if result[-1] == '\r':
                return ''.join(result)
            time.sleep(0.1)
        else:
            if time.time() > finishat:
                return None
登录后复制

可自定义行为:

如果需要 None 以外的超时返回值,只需替换上述代码片段中的 return None 语句即可。此外,在每次击键后调整 finishat 可以根据输入节奏调整超时。

以上是如何在Python中实现用户输入的时间限制?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板