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