raw_input и timeout [duplicate]

На этот вопрос уже есть ответ:

Я хочу сделать raw_input ('Введите что-то :. ') . Я хочу, чтобы он спал в течение 3 секунд, и если нет ввода, отмените запрос и запустите оставшуюся часть кода. Затем код зацикливается и снова реализует raw_input . Я также хочу, чтобы он сломался, если пользователь вводит что-то вроде 'q'.

35
задан tshepang 1 October 2012 в 19:09
поделиться

1 ответ

Есть простое решение, которое не использует потоки (по крайней мере, явно): используйте select , чтобы узнать, когда что-то нужно прочитать из stdin:

import sys
from select import select

timeout = 10
print "Enter something:",
rlist, _, _ = select([sys.stdin], [], [], timeout)
if rlist:
    s = sys.stdin.readline()
    print s
else:
    print "No input. Moving on..."

Edit [0]: очевидно, этот не будет работать в Windows , поскольку базовая реализация select () требует сокета, а sys.stdin - нет. Спасибо за предупреждение, @Fookatchu.

54
ответ дан 27 November 2019 в 06:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: