[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