Запрос на ввод данных у пользователя только в течение ограниченного времени в Python

Программа, над которой я работаю, должна остановиться и попросить пользователя ввести данные, а если их нет, продолжить работу с программой. Думаю, это будет выглядеть примерно так:

import time 

...[code to run before break]...

if input in time.sleep(5):
    [break out of normal code]
else:
    [return to normal code] 

 [code to run after break]...

Есть предположения?

РЕДАКТИРОВАТЬ: не думал об этом, когда я спросил, но я использую Windows (8.1).


person unknown    schedule 10.02.2015    source источник
comment
Google - ваш друг программиста ... stackoverflow. com / questions / 1335507 / [1]: stackoverflow.com/questions/1335507/   -  person FlyingGuy    schedule 10.02.2015
comment
Не подумал об использовании слова «тайм-аут». Это объясняет, почему я не мог получить результаты в Google.   -  person unknown    schedule 10.02.2015


Ответы (1)


Быстрый и грязный прием, но эффективный. Следующее ожидает ввода пользователя в течение 5 секунд или до тех пор, пока ввод не будет получен, в зависимости от того, что произойдет раньше.

from datetime import datetime, timedelta
import os
import signal
import threading
import time

waiting = False

def wait_and_kill(timeout):
    elapsed = timedelta(0)
    while elapsed.total_seconds() < timeout and waiting:
        start = datetime.now()
        time.sleep(0.1)
        elapsed += datetime.now() - start
    if waiting:
        os.kill(os.getpid(), signal.SIGINT)

try:
    t = threading.Thread(target=wait_and_kill, args=(5,))
    waiting = True
    t.start()
    raw = raw_input('> ')
    waiting = False
except KeyboardInterrupt:
    pass
person robobrobro    schedule 10.02.2015