在 Python 中,raw_input() 函数会暂停脚本的执行,直到用户提供某种形式的输入。但是,如果您想对此输入设置时间限制以防止脚本无限期挂起,该怎么办?
实现时间限制
适用于基于 Unix 的系统的一种方法是使用 signal.alarm 函数。当以秒为单位的时间限制调用时,此函数会在指定的持续时间后引发 KeyboardInterrupt 异常,从而有效地跳过 raw_input() 调用。
跨平台解决方案
为了跨平台兼容性或者如果您使用的是 Windows,另一种方法是结合使用 threading.Timer 和 thread.interrupt_main .
import thread import threading def raw_input_with_timeout(prompt, timeout=30.0): print(prompt, end=' ') timer = threading.Timer(timeout, thread.interrupt_main) astring = None try: timer.start() astring = input(prompt) except KeyboardInterrupt: pass timer.cancel() return astring
请注意,此方法以相同的方式处理用户启动的输入和超时,对于两种情况都返回 None 。如果需要区分这些情况,可以修改代码,在发生超时时设置一个标志,并在 KeyboardInterrupt 处理程序中单独处理。
特定于 Windows 的实现
对于特定于 Windows 的解决方案,您可以利用轮询 msvcrt.kbhit 的循环来检查用户输入,同时监视时间确保强制执行超时。
import msvcrt import time def raw_input_with_timeout(prompt, timeout=30.0): 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,您可以修改代码以指定在这种情况下要返回的替代默认值。
高级自定义
为了防止时间限制适用于单纯打字速度较慢的用户,您可以在每次输入字符后重新计算超时,确保计时器仅如果输入确实长时间暂停,则过期。
以上是如何在 Python 的 `raw_input()` 函数中设置用户输入的时间限制?的详细内容。更多信息请关注PHP中文网其他相关文章!