Empiezo una serie de artículos sobre mis librerías favoritas de Python. Las que uso una y otra vez, las que creo que merece la pena conocer.

La primera es Prompt Toolkit.

Si escribes tus herramientas para la terminal, esta te va a gustar.

https://python-prompt-toolkit.readthedocs.io/en/master/index.html

La librería, en pocas palabras

Con Prompt Toolkit puedes montar una interfaz de consola bastante completa. Algo de lo que trae:

  • Autocompletado y autosugerencia integrados.
  • Resaltado de sintaxis integrado.
  • Historial de sesión integrado.
  • Atajos de teclado.
  • Una abstracción de ncurses en Python.
  • Barras de progreso en tiempo real sobre ncurses.
  • Aplicaciones de consola a pantalla completa.
  • Hooks.
  • Soporte de asyncio.
  • Soporte de deadlines.
  • Y más.

Algunos ejemplos

Un REPL con esteroides

Montar un REPL decente cuesta casi nada. Y puedes tener resaltado de sintaxis en el prompt, mientras escribes. Me encanta.

from pygments.lexers.html import HtmlLexer
from prompt_toolkit.shortcuts import prompt
from prompt_toolkit.lexers import PygmentsLexer

text = prompt('Hi Medium! Enter HTML: ', lexer=PygmentsLexer(HtmlLexer))
print('You wrote: %s' % text)

Un REPL con resaltado de sintaxis HTML en vivo

Diálogos ncurses y más

Con Prompt Toolkit consigues buenas interfaces de línea de comandos sin tocar código ncurses. Trae atajos para diálogos, checkboxes, radio boxes y alguna cosa más.

Un ejemplo sencillo:

from prompt_toolkit.shortcuts import radiolist_dialog

result = radiolist_dialog(
    title="Hi Medium!",
    text="What's your favorite IDE?",
    values=[
        ("pycharm", "PyCharm"),
        ("vscode", "Vistual Studio Code"),
        ("wingide", "WingIDE")
    ]
).run()

Un diálogo de lista de opciones en la terminal

Un clon de VIM

Échale un ojo a la sección Gallery de su web:

La galería de la web de Prompt Toolkit

Hay demos muy buenas. Hasta un clon de VIM.

El clon de VIM hecho con Prompt Toolkit

Hasta aquí la primera. Si montas algo con ella, la documentación del enlace de arriba es por donde yo empezaría.