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实际上没有超时功能或类似的东西,但有没有办法通过系统命令或模块实现这一点?
答案 0 :(得分:0)
有几种看似合理的方法(其中一些可能是特定于Unix的):
subprocess
中可以kill
编辑的输入。 (许多函数,包括subprocess.run
,接受timeout
参数来自动执行此操作。)alarm
或类似信息向您自己的流程发送信号(并安装一个引发异常的signal
处理程序。)close
;这听起来很激烈但通常被认为是有效的,只要你在用open
恢复它之前不小心dup2
关闭描述符上的文件。read
和select
)阅读输入 - 遗憾的是,这会禁用readline
这样的好东西。在任何情况下,您都必须决定如何处理在超时之前输入的不完整但非空的输入。默认情况下,终端驱动程序可能会将其无形地传输到下一个输入提示符。
答案 1 :(得分:0)