C aplicaciones ommand-línea son uno de los tipos más antiguos y más utilizados de aplicaciones. Si es un usuario experimentado de Linux, es posible que apenas haya utilizado herramientas de GUI en lugar de herramientas de línea de comandos para realizar la misma tarea. Por ejemplo, Anaconda, el administrador de paquetes de Python, tiene herramientas de línea de comandos llamadas Conda y una herramienta GUI llamada anaconda navigator.
Lo que hace que la aplicación de línea de comandos sea popular entre los desarrolladores es que consumen muy pocos recursos en comparación con su contraparte GUI y ofrecen un mejor rendimiento.
Python es un lenguaje simple y poderoso para crear aplicaciones de línea de comandos. Proporciona toneladas de bibliotecas ya escritas por muchos grandes programadores, lo que facilita nuestra tarea ya que no necesitamos reescribir el mismo código.
En este tutorial, le presentaré la biblioteca Argparse de Python, que puede analizar los argumentos de las aplicaciones de línea de comando. Esto es útil para crear excelentes interfaces de línea de comandos. Para seguir este tutorial, se recomienda tener instalada la última versión de Python. También tenemos un tutorial paso a paso sobre cómo actualizar Python a la última versión en Linux.
Introducción
El análisis de argumentos es un concepto importante que debemos utilizar para crear interfaces de línea de comandos potentes y fáciles de usar. Si ha utilizado aplicaciones de línea de comandos anteriormente, es posible que haya notado que podemos agregar argumentos a las aplicaciones de línea de comandos para configurar las opciones de la herramienta.
Por ejemplo, si ha utilizado el comando ls en Linux, que se utiliza para enumerar los elementos del directorio de trabajo actual, es posible que haya visto un resultado similar, como se muestra en la imagen de abajo.
Como puede ver en la imagen, enumera los elementos del directorio actual. También podemos usar el comando ls de manera más beneficiosa dándole un argumento como lo hice en el siguiente comando.
ls -a
Ahora, al escribir este comando en la terminal, enumerará todos los elementos presentes en el directorio de trabajo actual, incluidos los elementos ocultos. Como puede ver, al proporcionar argumentos en el comando, podemos especificar fácilmente las opciones del comando de una manera amigable. Aquí es donde entran en juego los argumentos. Hacen que las aplicaciones de la línea de comandos sean más útiles y amigables.
Quizás se pregunte cuándo y cómo agregar argumentos de línea de comandos en sus aplicaciones. Imagine que está creando una aplicación que necesita la entrada del usuario del nombre de archivo que procesará la aplicación.
Podemos hacerlo de dos formas:
- solicitando al usuario que agregue el nombre del archivo o
- proporcionando al usuario que agregue el nombre del archivo como argumento al comando.
El primer truco es bueno, pero el segundo es más útil ya que el usuario puede dar todas las opciones en un comando, lo que lo hace más fácil de usar.
Python incluye una gran biblioteca llamada “argparse”, que es útil para crear y analizar argumentos de línea de comandos y puede construir interfaces de línea de comandos poderosas para los usuarios muy fácilmente. Echemos un vistazo profundo a la biblioteca argparse de Python.
Biblioteca Argparse
La biblioteca argparse es una forma fácil y útil de analizar argumentos mientras se <em>crean </em> aplicaciones de línea de comandos en Python. Aunque existen otros argumentos para analizar bibliotecas como optparse, getopt, etc., la biblioteca argparse es oficialmente la forma recomendada para analizar los argumentos de la línea de comandos.
También está disponible en la biblioteca estándar de Python, por lo que no necesitamos ninguna configuración manual. La biblioteca argparse se ha creado utilizando la biblioteca optparse de python, pero argparse es más útil y amigable para los desarrolladores que la biblioteca optparse .
Demostración práctica de Argparse
Veamos una demostración práctica de cómo usar la biblioteca argparse para crear una interfaz de línea de comandos simple. Este programa aceptará una ruta y comprobará si la ruta existe o no y si existe, luego imprimirá si es un archivo o un directorio.
import os import argparse parser = argparse.ArgumentParser(`description = "Path Existence Checker") parser.add_argument("--path", help="input a path to check if it exists") args = parser.parse_args() input_path = args.path if os.path.isdir(input_path): print("The path Exists and it is a directory") elif os.path.isfile(input_path): print("The path Exists and it is a file") else: print("The path does not exist")
Personalización
Ayuda de uso personalizado
parser = argparse.ArgumentParser(description = "Path Existence Checker", usage="cla.py path")
Personalización de argumentos
También podemos usar la biblioteca Argparse para personalizar los argumentos como si los argumentos serán requeridos o no, dando a un argumento un valor predeterminado.
Añadiendo valor predeterminado
Podemos dar a los argumentos un valor predeterminado usando el parámetro predeterminado del método add_argument () . Por ejemplo, consulte el siguiente código.
import os import argparse parser = argparse.ArgumentParser(description = "Path Existence Checker", usage="cla.py path") parser.add_argument("--path", help="input a path to check if it exists", default="filename.txt") args = parser.parse_args() input_path = args.path if input_path == None: exit() elif os.path.isdir(input_path): print("The path Exists and it is a directory") elif os.path.isfile(input_path): print("The path Exists and it is a file") else: print("The path does not exist")
Al ejecutar el programa anterior sin ningún argumento, obtendremos la siguiente salida. Como se muestra en la salida, el programa verifica la ruta filename.txt, que establecemos en el parámetro predeterminado.
Establecimiento de requisitos de argumentos
También podemos usar la biblioteca Argparse para establecer los requisitos del argumento, es decir, si los argumentos serán necesarios o no. Para hacerlo, necesitamos usar el parámetro requerido, como se muestra en el siguiente código.
import os import argparse parser = argparse.ArgumentParser(description = "Path Existence Checker", usage="cla.py path") parser.add_argument("--path", help="input a path to check if it exists", default="filename.txt", required=True) args = parser.parse_args() input_path = args.path if input_path == None: exit() elif os.path.isdir(input_path): print("The path Exists and it is a directory") elif os.path.isfile(input_path): print("The path Exists and it is a file") else: print("The path does not exist")
Al ejecutar el código anterior sin ningún argumento, obtendrá un error que indica que se requieren los siguientes argumentos.
Tipo de argumento
También podemos establecer el tipo de datos utilizado en el argumento. Por ejemplo, si necesitamos la ruta, deberíamos dar un tipo de datos de cadena. Si un usuario ingresa un tipo de datos que no es una cadena, Argparser lo cambiará a una cadena. Para establecer el tipo predeterminado de un argumento, ejecute el siguiente código.
import os import argparse parser = argparse.ArgumentParser(description = "Path Existence Checker", usage="cla.py path") parser.add_argument("--path", help="input a path to check if it exists", type=str) args = parser.parse_args() input_path = args.path if input_path == None: exit() elif os.path.isdir(input_path): print("The path Exists and it is a directory") elif os.path.isfile(input_path): print("The path Exists and it is a file") else: print("The path does not exist")
Producción:
Conclusión
Esto es solo lo básico para analizar argumentos usando la biblioteca Argparse. Después de seguir este tutorial, se recomienda leer la documentación oficial para explorar más trucos para usar esta biblioteca. Es posible que también desee ver la publicación sobre el uso de inicio de sesión en Python, que es muy útil para escribir aplicaciones grandes y depurar fácilmente.