raw_input_timeout
David Villa
dvilla en gmx.net
Vie Mayo 27 13:54:46 CEST 2005
Hola:
Si esperas leer una linea (es decir, con su '\n') yo creo que lo más
sencillo y elegante es select():
import sys, select
timeout = 5
rd = select.select([sys.stdin],[],[], timeout)[0]
if not rd:
print 'tiempo excedido'
else:
print raw_input()
Saludos
El vie, 27-05-2005 a las 09:40 +0200, Antonio Castro escribió:
> Pretendo imponer un timeout a una entrada por teclado y pensé
> usar signal.alarm() pero parece que raw_input() hace algo raro
> con la alarma. El programita que pretendo hacer no devuelve el
> control pasado el tiempo establecido aunque si se ve afectado el
> resultado por el limite de tiempo.
>
> ===================8<-----------------------------------------------
> #!/usr/bin/python
> # -*- coding: latin1 -*-
>
> import signal
>
> TimeoutExcept= 'Timeout'
>
> def HandlerTimeout(signum, frame):
> raise TimeoutExcept
>
> def raw_input_timeout(prompt, timeout):
>
> signal.signal(signal.SIGALRM, HandlerTimeout) # Asociar manejador
> signal.alarm(timeout) # Programar la alarma a 'timeout' segundos.
> try:
> print ("Timeout in %d sec." % timeout)
> x=raw_input(prompt)
> except:
> return ''
> signal.alarm(0) # Desactivar la alarma
> return x
>
> x=raw_input_timeout("Nombre : ", 5)
> print "<%s>" % x
> ===================8<-----------------------------------------------
>
>
Más información sobre la lista de distribución Python-es