我正在开发一个接受用户输入的Python程序。我希望程序要求输入,如果用户没有输入任何内容并且满足条件(如果是某个时间),我希望程序停止询问
每当您要求输入时,整个程序就会停止并等待。有没有办法在检查程序其他部分的同时要求输入?例如,
from datetime import datetime
now = datetime.now()
formatted_time = now.strftime('%H:%M:%S')
time_list = formatted_time.split(":")
hour = int(time_list[0])
name = input("Your name: ")
if hour > 12:
print("Too late")
它永远不会到达
if hour > 12
,因为它仍在等待输入。有什么办法可以让 Windows 上不出现这个问题吗?我知道有一些方法可以进行倒计时,但我不知道如何做到这一点。
由于
input
将冻结执行,任何依赖于 input
调用后代码的解决方案都将很困难。使用原始倒计时可能行不通。
如果您不需要在后台运行任何内容,则 pytimedinput 包即可解决问题。它包括
timedInput
函数,该函数返回 (input: str, timed_out: bool)
的元组
from pytimedinput import timedInput
seconds: int = 15 # Number of seconds you want to wait
name, timed_out = timedInput("Your name: ", timeout=seconds)
if timed_out:
print("Too late!")
如果您在等待输入时需要发生其他事情,您可以考虑使用 asyncio 或类似的东西。 这个问题问的是在等待输入的同时在后台执行任务,但不一定是输入超时。如果您两者都需要,请考虑将
async def
解决方案之一与 pytimedinput
结合起来。像这样的事情可能会成功:
import asyncio
from pytimedinput import timedInput
async def aTimedInput(message: str, seconds: int) -> tuple[str, bool]:
return (await asyncio.to_thread(timedInput, message, seconds))
一旦定义了
aTimedInput
,你如何使用它将在很大程度上取决于你到底想要做什么。