Таймер для ввода текста python
Мне нужно, что бы человеку давалось 5 секунд на то, что бы ввести какой либо текст. Если за 5 секунд он этого не сделает, то выполнение программы должно остановится. Но, программа останавливается только если успеть что либо ввести, при истечении 5 секунд программа продолжает работу.
import asyncio
from aioconsole import ainput
async def main():
async def input():
x = await ainput()
try:
await asyncio.wait_for(input(), timeout=5)
except asyncio.TimeoutError:
print('timeout')
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Для питона 3.9 на линукс код в вопросе работает нормально.
Для питона ниже 3.7 я бы делал так потому как wait_for не ждал таймаута на функции
import asyncio
from aioconsole import ainput
async def main():
async def input():
x = await ainput()
return x
try:
task = asyncio.create_task (input())
await asyncio.wait_for(task, timeout=5)
except asyncio.TimeoutError:
task.cancel()
print('timeout')
try:
ret = await task
except asyncio.CanceledError:
ret = None
loop = asyncio.get_event_loop()
loop.run_until_complete(main())