Ввод с клавиатуры с тайм-аутом?

Все объекты имеют метод финализатора, даже если Вы не реализовали один при помощи c# деструктора (который, как на самом деле гарантируют, не назовет GC). Это - просто хорошая практика для подавления вызова при реализации IDisposable, потому что это означает, что Вы решили выполнить завершение explictly.

devx статья

52
задан martineau 7 September 2019 в 03:09
поделиться

2 ответа

Пример, с которым вы связались, неверен, и исключение фактически возникает при вызове обработчика аварийных сигналов, а не при чтении блоков. Лучше попробуйте следующее:

import signal
TIMEOUT = 5 # number of seconds your want for timeout

def interrupted(signum, frame):
    "called when read times out"
    print 'interrupted!'
signal.signal(signal.SIGALRM, interrupted)

def input():
    try:
            print 'You have 5 seconds to type in your stuff...'
            foo = raw_input()
            return foo
    except:
            # timeout
            return

# set alarm
signal.alarm(TIMEOUT)
s = input()
# disable the alarm after success
signal.alarm(0)
print 'You typed', s
31
ответ дан 7 November 2019 в 09:05
поделиться

Использование вызова select короче и должно быть намного более переносимым

import sys, select

print "You have ten seconds to answer!"

i, o, e = select.select( [sys.stdin], [], [], 10 )

if (i):
  print "You said", sys.stdin.readline().strip()
else:
  print "You said nothing!"
83
ответ дан 7 November 2019 в 09:05
поделиться
Другие вопросы по тегам:

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