这里是关于如何实现Python中获取键盘输入并同时设置超时的攻略。
问题描述
在编写Python程序时,有时需要获取用户的键盘输入,但又不希望程序一直等待用户输入,这时就需要设置超时功能。下面我们将介绍如何使用Python实现获取键盘输入并实现超时的功能。
解决方案
Python中可以使用input()
函数获取键盘输入,但该函数是一个阻塞式函数,即当用户输入时程序会一直等待,直到用户输入完毕或按下回车键才会继续执行后续代码。如果需要在一定时间内获取用户输入,可以使用Python中的threading模块或multiprocessing模块实现。
方案一:使用threading模块实现超时功能
示例代码如下:
import threading
def input_with_timeout(prompt, timeout):
print(prompt)
timer = threading.Timer(timeout, thread.interrupt_main)
astring = None
try:
timer.start()
astring = input()
except KeyboardInterrupt:
print('Time is up!')
timer.cancel()
return astring
astring = input_with_timeout('Please input something:', 5)
print('The input string is:', astring)
代码中input_with_timeout()
函数接收两个参数:prompt
表示输入提示信息,timeout
表示获取输入的超时时间。函数通过threading.Timer()
方法启动一个计时器线程,当超时时间达到时,执行thread.interrupt_main()
方法,抛出KeyboardInterrupt异常,捕捉后输出提示信息Time is up!,并终止计时。如果用户在超时时间内输入了数据,则计时器被取消,函数正常返回输入的数据。
方案二:使用multiprocessing模块实现超时功能
示例代码如下:
from multiprocessing import Process, Queue
import sys
def read_input(queue):
sys.stdin.flush()
input_str = sys.stdin.readline()
queue.put(input_str)
def input_with_timeout(prompt, timeout):
print(prompt)
queue = Queue()
process = Process(target=read_input, args=(queue,))
process.start()
try:
input_str = queue.get(timeout=timeout)
except:
input_str = None
process.terminate()
return input_str
astring = input_with_timeout('Please input something:', 5)
if astring:
print('The input string is:', astring)
else:
print('Time is up!')
代码中,input_with_timeout()
函数同样接收两个参数:prompt
和timeout
,但使用了multiprocessing模块的Process类创建一个子进程,该进程读取用户的键盘输入,并把输入数据放入Queue中。在主进程中,通过Queue.get(timeout=timeout)从队列中获取输入数据,等待时间不超过timeout秒,如果超时则捕捉异常并返回None值。如果获取到了输入数据,则返回输入的数据。
总结
以上是两种实现Python中获取键盘输入并同时设置超时的方案。如果需要读取用户的键盘输入并控制超时,可以根据实际需求选择合适的方案进行实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 获取键盘输入,同时有超时的功能示例 - Python技术站