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

2024-10-03 23:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

Python3:我试图允许用户在给定的时间内将响应输入到输入中,但是在给定的时间段之后,如果用户没有输入任何内容,我希望中止输入并为存储输入的变量指定一个默认值,或者在给定的时间段之后将默认值输入到input语句中。在

我试过了:

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并没有真正的超时函数或类似的功能,但是有没有什么方法可以通过系统命令或模块来实现呢?在


Tags: 用户answerfromimport内容input时间timeout
1条回答
网友
1楼 · 发布于 2024-10-03 23:23:17

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

  1. 读取subprocess中的输入,该输入可以在超时后killed。(许多函数,包括^{},都接受一个timeout参数来自动执行此操作。)
  2. 使用alarm或类似的方法向您自己的进程发送一个信号(并安装一个抛出异常的signal处理程序)。在
  3. 让另一个线程close在超时后读取描述符;这听起来很激烈,但通常说是可以工作的,只要在用dup2还原之前,不要意外地open一个关闭的描述符上的文件。在
  4. 使用非阻塞readselect等低级工具读取输入,这将不幸地禁用readline之类的好东西。在

在任何情况下,您必须决定如何处理在超时之前输入的不完整但非空的输入。默认情况下,终端驱动程序可能会将其无形地传输到下一个输入提示符。在

相关问题 更多 >