Tengo una aplicación basada en Python que puede aceptar algunos comandos en un simple read-eval-print-loop. Estoy usando raw_input('> ')
para obtener la entrada. En los sistemas basados en Unix, también import readline
para hacer que las cosas se comporten un poco mejor. Todo esto está funcionando bien.¿Cómo implementar un REPL de Python que maneje bien la salida asíncrona?
El problema es que hay eventos asíncronos que entran, y me gustaría imprimir la salida tan pronto como suceden. Desafortunadamente, esto hace que las cosas se vean feas. La cadena ">" no aparece de nuevo después de la salida, y si el usuario está a la mitad de escribir algo, corta el texto a la mitad. Probablemente debería volver a dibujar el texto en progreso del usuario después de imprimir algo.
Parece que debe ser un problema resuelto. ¿Cuál es la forma correcta de hacer esto?
También tenga en cuenta que algunos de mis usuarios están basados en Windows.
TIA
Editar: La respuesta aceptada funciona bajo plataformas Unixy (cuando el módulo readline está disponible), pero si alguien sabe cómo hacer este trabajo bajo Windows, que sería muy apreciada!
Gracias, readline.get_line_buffer() es un buen comienzo. Si alguien tiene algún consejo sobre cómo hacer que esto funcione en Windows (que no tiene un módulo de lectura), házmelo saber. – andy
¿Funciona en Cygwin, tal vez? – cdleary