[pyar] Leer teclado sin bloquear el proceso
Federico Heinz
fheinz en vialibre.org.ar
Mie Ago 11 22:27:20 ART 2010
Che, dejen de tirarle salvavidas de plomo al pobre José Luis... :-)
Lo que estás buscando se llama "non-blocking IO", y entiendo que el
soporte que tiene fcntl es multiplataforma. La idea es que cuando
llamás a sys.stdin.read() y no hay datos, no se queda esperando.
Para eso podes poner a sys.stdin en non-blocking mode. Queda más o
menos así (aunque no basta con ingresar "-", hay que darle
"-<ENTER>" para que reaccione, seguramente hay que meterle algún
otro flag más):
import fcntl
# hacé que stdin no bloquee
fd = sys.stdin.fileno()
flags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, flags | os.O_NONBLOCK)
# Estoy leyendo un puerto serie
datos = []
continuar = True
while continuar:
if ser.inWaiting() > 0:
linea = ser.readline().rstrip()
if linea:
datos.append(linea)
# Aca tendria que ir el código para que cuando se detecte la
# presión de la tecla "-" (por ejemplo) se salga del bucle
if sys.stdin.read(1) == "-":
print "Captura finalizada."
continuar = False
print "Datos capturados:"
print datos
More information about the pyar
mailing list