Clases principales

El módulo cli ofrece dos funcionalidades principales:

  • Creación de menús
  • Definición de inductores (prompt)

A cada una de las funcionalidades mencionadas le corresponde una clase.

La clase Menu permite crear menús cuyas opciones pueden ser seleccionadas mediante una línea de comandos con inductor (prompt) o con la simple pulsación de una tecla.

Lo primero que hay que hacer es definir las opciones. Para ello se debe crear un diccionario donde cada clave será un comando o tecla que apuntará a una lista de dos componentes, la descripción de la opción y la función a ser ejecutada.

opciones = {
            'a': ['Opción A', opcion_a],
            'b': ['Opción B', opcion_b],
            'c': ['Opción C', opcion_c]
        }

Luego, hay que instanciar la clase Menu pasándole como parámetro el diccionario de opciones:

menu = Menu(opciones)

Por último, para permitirle al usuario elegir una opción, se debe ejecutar el método pedir:

opcion = menu.pedir('Elija una opción:')

El método pedir devuelve la función que corresponde a la opción (clave del diccionario) seleccionada previamente.

Podemos ahorrarnos un paso y hacer ambas cosas en una sola sentencia:

opcion = Menu(opciones).pedir('Elija una opción:')

Si se desea que la selección se haga presionando una sola tecla, basta con agregar un parámetro más al método pedir:

opcion = Menu(opciones).pedir('Elija una opción:', True)

El parámetro se llama tecla, y debe tener el valor True. Si se desea prescindir del mensaje inductor, la sentencia debe ser:

opcion = Menu(opciones).pedir(tecla=True)

Ahora sólo basta con ejecutar dicha función:

opcion()

Prompt

La clase Prompt permite definir una interfaz de línea de comandos con autocompletado mediante la tecla de tabulación (Tab) y un mensaje de inducción opcional.

Los comandos permitidos se almacenan en una lista. Uno de los comandos de la lista debe reservarse para salir del ciclo.

opciones = ['start', 'stop', 'list', 'print']
salir = opciones[1]  # El comando para salir será 'stop'

El ciclo al que nos estamos refiriendo se denomina REPL (Read, Eval, Print Loop) y consiste en leer la cadena ingresada por el usuario, evaluar la sentencia, imprimir el resultado y repetir la operación.

Para instanciar la clase Prompt, se le carga como parámetros la lista de opciones y, opcionalmente, la palabra comando que se definió para salir del ciclo y un mensaje inductor.

prompt = Prompt(opciones)

De no especificarse la palabra comando para salir, se asume 'quit'. Pero en el caso del ejemplo, la palabra es 'stop' y ya la guardamos en salir, por lo tanto la instanciación debe ser:

prompt = Prompt(opciones, salir)

El siguiente paso es invocar el método ciclo():

ciclo = prompt.ciclo()

Como siempre, podemos ahorrarnos un paso de la siguiente manera:

ciclo = Prompt(opciones, salir).ciclo()

El método ciclo() nos devuelve un objeto generador con el cual vamos a obtener las líneas ingresadas por el usuario:

linea = next(ciclo)

Esta sentencia debería estar en un ciclo como el del siguiente ejemplo:

while linea != salir:
    linea = next(ciclo)
    if linea:
        # Aquí se procesa la línea que ingresó el usuario.

results matching ""

    No results matching ""