Python3在有限时间内提示用户输入,如果用户没有响应,则输入默认值

时间:2018-04-01 01:15:49

标签: python python-3.x input timeout

Python3:我试图让用户有一定的时间在输入中输入响应,但是如果他们没有输入任何内容,在给定的时间后,我想中止输入并分配一个存储输入的变量的默认值,或者在给定时间段后将默认值输入到输入语句中。

我试过这个:

from threading import Timer
timeout = 2
t = Timer(timeout, print, ["\nSorry, time is up"])
t.start()
answer = input("You have 2 seconds to answer:")
t.cancel()
print(answer)

来自不同的堆栈溢出帖子,但问题是解释器仍然提示用户输入,即使在最后一行执行并打印answer之后,这对我所做的不起作用尝试做(实际上,当玩家没有给它输入时需要继续运行的命令行游戏,但是当它确实接收输入时更新)。

最好的方法是什么?我知道python实际上没有超时功能或类似的东西,但有没有办法通过系统命令或模块实现这一点?

2 个答案:

答案 0 :(得分:0)

有几种看似合理的方法(其中一些可能是特定于Unix的):

  1. 在超时后读取subprocess中可以kill编辑的输入。 (许多函数,包括subprocess.run,接受timeout参数来自动执行此操作。)
  2. 使用alarm或类似信息向您自己的流程发送信号(并安装一个引发异常的signal处理程序。)
  3. 在超时后读取另一个线程close;这听起来很激烈但通常被认为是有效的,只要你在用open恢复它之前不小心dup2关闭描述符上的文件。
  4. 使用较低级别的设施(例如非阻止readselect)阅读输入 - 遗憾的是,这会禁用readline这样的好东西。
  5. 在任何情况下,您都必须决定如何处理在超时之前输入的不完整但非空的输入。默认情况下,终端驱动程序可能会将其无形地传输到下一个输入提示符。

答案 1 :(得分:0)

使用Positive通话可能更简单。

select

请参阅Keyboard input with timeout?