Таймер для ввода текста 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())
→ Ссылка