¿Desea crear sus propios programas de línea de comandos de Python pero le resulta demasiado difícil?  Use Click, una herramienta útil de Python para optimizar su código.

Cómo crear sus propios programas de línea de comandos en Python con Click

Anuncio Click es un paquete de Python para escribir interfaces de línea de comandos. Produce documentación hermosa para usted y le permite construir interfaces de línea de comandos en tan solo una línea de código. En resumen: es increíble y puede ayudar a llevar sus programas al siguiente nivel. Así

Anuncio

Click es un paquete de Python para escribir interfaces de línea de comandos. Produce documentación hermosa para usted y le permite construir interfaces de línea de comandos en tan solo una línea de código. En resumen: es increíble y puede ayudar a llevar sus programas al siguiente nivel.

Así es como puede usarlo para animar sus proyectos de Python.

Escribir programas de línea de comandos sin clic

Es posible escribir programas de línea de comandos sin usar Click, pero hacerlo requiere más esfuerzo y mucho más código. Debe analizar los argumentos de la línea de comandos, realizar la validación, desarrollar la lógica para manejar diferentes argumentos y crear un menú de ayuda personalizado. ¿Quieres agregar una nueva opción? Entonces modificará su función de ayuda.

No hay nada de malo en escribir su propio código, y hacerlo es una excelente manera de aprender Python, pero Click le permite seguir los principios de "No se repita" (DRY). Sin Click, escribirás un código que es frágil y requiere mucho mantenimiento cada vez que ocurre algún cambio.

Aquí hay una interfaz de línea de comando simple codificada sin Click:

 import sys import random def do_work(): """ Function to handle command line usage""" args = sys.argv args = args[1:] # First element of args is the file name if len(args) == 0: print('You have not passed any commands in!') else: for a in args: if a == '--help': print('Basic command line program') print('Options:') print(' --help -> show this basic help menu.') print(' --monty -> show a Monty Python quote.') print(' --veg -> show a random vegetable') elif a == '--monty': print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?') elif a == '--veg': print(random.choice(['Carrot', 'Potato', 'Turnip'])) else: print('Unrecognised argument.') if __name__ == '__main__': do_work() 

Ejemplo de interfaz de línea de comando de Python

Estas 27 líneas de Python funcionan bien pero son muy frágiles. Cualquier cambio que realice en su programa necesitará muchos otros códigos de soporte para cambiar. Si cambia el nombre de un argumento, deberá actualizar la información de ayuda. Este código puede crecer fácilmente fuera de control.

Aquí está la misma lógica con Click:

 import click import random @click.command() @click.option('--monty', default=False, help='Show a Monty Python quote.') @click.option('--veg', default=False, help='Show a random vegetable.') def do_work(monty, veg): """ Basic Click example will follow your commands""" if monty: print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?') if veg: print(random.choice(['Carrot', 'Potato', 'Turnip'])) if __name__ == '__main__': do_work() 

Este ejemplo de Click implementa la misma lógica en 16 líneas de código. Los argumentos se analizan por usted y se genera la pantalla de ayuda:

Python Click genera automáticamente la pantalla de ayuda

Esta comparación básica muestra cuánto tiempo y esfuerzo puede ahorrar utilizando programas como Click. Si bien la interfaz de la línea de comandos puede parecer la misma para el usuario final, el código subyacente es más simple y ahorrará mucho tiempo codificando. Cualquier cambio o actualización que escriba en el futuro también verá aumentos significativos en el tiempo de desarrollo.

Comenzando con Click for Python

Antes de usar Click, es posible que desee configurar un entorno virtual. Aprenda a usar el entorno virtual de Python. Aprenda a usar el entorno virtual de Python. Ya sea que sea un desarrollador experimentado de Python o que recién esté comenzando, aprenda a configurar un entorno virtual. Es esencial para cualquier proyecto de Python. Lee mas . Esto evitará que sus paquetes de Python entren en conflicto con su sistema Python u otros proyectos en los que pueda estar trabajando. También puede probar Python en su navegador. Pruebe Python en su navegador con estos shells interactivos en línea gratuitos. Pruebe Python en su navegador con estos shells interactivos en línea gratuitos. prueba el código directamente en tu navegador. Aquí están los mejores intérpretes de Python en línea que hemos encontrado. Lea más si quiere jugar con Python y Click.

Finalmente, asegúrese de estar ejecutando Python versión 3. Es posible usar Click con Python versión 2, pero estos ejemplos están en Python 3. Obtenga más información sobre las diferencias entre Python 2 y Python 3.

Una vez listo, instale Click desde la línea de comando usando PIP (cómo instalar PIP para Python):

 pip install click 

Escribir su programa de primer clic

En un editor de texto, comience importando Click:

 import click 

Una vez importado, cree un método y un punto de entrada principal . Nuestra guía Python OOP los cubre con mayor detalle, pero proporcionan un lugar para almacenar su código y una forma para que Python comience a ejecutarlo:

 import click import random def veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg() 

Este script muy simple generará un vegetal aleatorio. Su código puede verse diferente, pero este simple ejemplo es perfecto para combinar con Click.

Guarde esto como click_example.py, y luego ejecútelo en la línea de comando (después de navegar a su ubicación):

 python click_example.py 

Deberías ver un nombre de vegetal al azar. Mejoremos las cosas agregando Click. Cambie su código para incluir los decoradores Click y un bucle for :

 @click.command() @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total): """ Basic method will return a random vegetable""" for number in range(total): print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg() 

Al correr, verás un vegetal al azar que se muestra tres veces.

Analicemos estos cambios. El decorador @ click.command () configura Click para trabajar con la función que sigue inmediatamente al decorador. En este caso, esta es la función veg () . Necesitará esto para cada método que quiera usar con Click.

El decorador @ click.option configura el clic para aceptar parámetros desde la línea de comando, que pasará a su método. Aquí se usan tres argumentos:

  1. –Total: este es el nombre de la línea de comando para el argumento total .
  2. predeterminado: si no especifica el argumento total cuando usa su script, Click usará el valor predeterminado.
  3. ayuda: una breve oración que explica cómo usar su programa.

Veamos Click en acción. Desde la línea de comando, ejecute su script, pero pase el argumento total de esta manera:

 python click_example.py --total 10 

Al establecer –total 10 desde la línea de comando, su script imprimirá diez vegetales al azar.

Si pasa el indicador –help, verá una buena página de ayuda, junto con las opciones que puede usar:

 python click_example.py --help 

Ayuda de Python Click

Agregar más comandos

Es posible usar muchos decoradores Click en la misma función. Agregue otra opción de clic a la función veg :

 @click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.') 

No olvides pasar esto al método:

 def veg(total, gravy): 

Ahora, cuando ejecuta su archivo, puede pasar la bandera de salsa :

 python click_example.py --gravy y 

La pantalla de ayuda también ha cambiado:

Pantalla de ayuda de Python Click

Aquí está todo el código (con algunas refactorizaciones menores para la limpieza):

 import click import random @click.command() @click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.') @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total, gravy): """ Basic method will return a random vegetable""" for number in range(total): choice = random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']) if gravy: print(f'{choice} with gravy') else: print(choice) if __name__ == '__main__': veg() 

Aún más opciones de clics

Una vez que conozca los conceptos básicos, puede comenzar a buscar opciones de clics más complejas. En este ejemplo, aprenderá cómo pasar varios valores a un solo argumento, que Click convertirá en una tupla. Puede obtener más información sobre las tuplas en nuestra guía del diccionario Python.

Cree un nuevo archivo llamado click_example_2.py . Aquí está el código de inicio que necesita:

 import click import random @click.command() def add(): """ Basic method will add two numbers together.""" pass if __name__ == '__main__': add() 

No hay nada nuevo aquí. La sección anterior explica este código en detalle. Agregue una @ click.option llamada números :

 @click.option('--numbers', nargs=2, type=int, help='Add two numbers together.') 

El único código nuevo aquí son las opciones nargs = 2 y type = int . Esto le indica a Click que acepte dos valores para la opción de números, y que ambos deben ser de tipo entero. Puede cambiar esto a cualquier número o tipo de datos (válido) que desee.

Finalmente, cambie el método add para aceptar el argumento de los números y realice un procesamiento con ellos:

 def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}') 

Se puede acceder a cada valor que ingrese a través del objeto de números . Aquí se explica cómo usarlo en la línea de comando:

 python click_example_2.py --numbers 1 2 

Python Click nargs result

Click es la solución para las utilidades de Python

Como has visto, Click es fácil de usar pero muy poderoso. Si bien estos ejemplos solo cubren los conceptos básicos de Click, hay muchas más características que puede aprender ahora que tiene un conocimiento sólido de los conceptos básicos.

Si está buscando algunos proyectos de Python para practicar sus nuevas habilidades encontradas, ¿por qué no aprender a controlar un Arduino con Python? ¿Cómo programar y controlar un Arduino con Python? ¿Cómo programar y controlar un Arduino con Python? Tristemente, es imposible para programar directamente un Arduino en Python, pero puedes controlarlo a través de USB usando un programa Python. Así es cómo. Leer más, o qué tal leer y escribir en Google Sheets con Python Cómo leer y escribir en Google Sheets con Python Cómo leer y escribir en Google Sheets con Python Python puede parecer extraño e inusual, sin embargo, es fácil de aprender y usar. En este artículo, le mostraré cómo leer y escribir en Hojas de cálculo de Google utilizando Python. Lee mas ? ¡Cualquiera de estos proyectos sería perfecto para convertir a Click!

Explora más sobre: ​​Tutoriales de codificación, Python.