Procesando parámetros en la línea de comando en Python

Seguramente tarde o temprano te llegará el día donde tu script creado en python requiera de uno o varios parámetros en la línea de comandos y entonces pegas el grito en el cielo y sales corriendo a contárselo a tu mejor amigo (claro si tienes amigos!).
Así que manos a la obra…
Leyendo los parámetros
En el siguiente código muestro como leer todo lo que se escriba después del nombre del script
1
2
3
4
5
6
7
| #!/usr/bin/env python# -*- coding: utf-8 -*-import sysprint "Número de parámetros: ", len(sys.argv)print "Lista de argumentos: ", sys.argv |
Así de simple, y el resultado es algo como lo siguiente:
1
2
3
4
5
6
7
| $ python parametros-basico.py Número de parámetros: 1Lista de argumentos: ['parametros-basico.py']$ python parametros-basico.py -a ALL file1 file2Número de parámetros: 5Lista de argumentos: ['parametros-basico.py', '-a', 'ALL', 'file1', 'file2']$ |
Esto ya es pan comido, fué una concha!
Procesando parámetros
Al revisar varias de las opciones, parece que lo más recomendado es usar argparse, así que primero un ejemplo simple, procesando la opción -h o –help.
1
2
3
4
5
6
7
| #!/usr/bin/env python# -*- coding: utf-8 -*-import argparseparser = argparse.ArgumentParser()parser.parse_args() |
Y así de simple (esto es la fortaleza de python!), pero y el resultado del código se ve así:
1
2
3
4
5
6
7
8
9
10
11
12
13
| $ python argparse-basico.py$ python argparse-basico.py -husage: argparse-basico.py [-h]optional arguments: -h, --help show this help message and exit$ python argparse-basico.py --helpusage: argparse-basico.py [-h]optional arguments: -h, --help show this help message and exit |
Ahora veamos algo un poco más complicado, quiero adicionar la clásica opción -v para depurar el proceso, lo que se haría como sigue:
1
2
3
4
5
6
7
8
9
10
11
12
| #!/usr/bin/env python# -*- coding: utf-8 -*-import argparseparser = argparse.ArgumentParser()parser.add_argument("-v", "--verbose", help="Mostrar información de depuración", action="store_true")args = parser.parse_args()# Aquí procesamos lo que se tiene que hacer con cada argumentoif args.verbose: print "depuración activada!!!" |
Y el resultado es:
1
2
3
4
5
6
7
8
9
10
11
12
| $ python argparse-mas-una-opcion.py -husage: argparse-mas-una-opcion.py [-h] [-v]optional arguments: -h, --help show this help message and exit -v, --verbose Mostrar información de depuración$ python argparse-mas-una-opcion.py -vdepuración activada!!!$ python argparse-mas-una-opcion.py --verbosedepuración activada!!! |
Así que ya está más que listo, pero falta el ejemplo avanzado, que tal una opción del tipo “-f filename”, mi lǵica me dice que tiene que ser algo como:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #!/usr/bin/env python# -*- coding: utf-8 -*-import argparseparser = argparse.ArgumentParser()parser.add_argument("-v", "--verbose", help="Mostrar información de depuración", action="store_true")parser.add_argument("-f", "--file", help="Nombre de archivo a procesar")args = parser.parse_args()# Aquí procesamos lo que se tiene que hacer con cada argumentoif args.verbose: print "depuración activada!!!"if args.file: print "El nombre de archivo a procesar es: ", args.file |
Y el resultado se veee asíiii:
1
2
3
4
5
6
7
8
9
10
| $ python argparse-mas-una-opcion-mas-valor.py -husage: argparse-mas-una-opcion-mas-valor.py [-h] [-v] [-f FILE]optional arguments: -h, --help show this help message and exit -v, --verbose Mostrar información de depuración -f FILE, --file FILE Nombre de archivo a procesar$ python argparse-mas-una-opcion-mas-valor.py -f agenda.txtEl nombre de archivo a procesar es: agenda.txt |
Excelente, la lógica del módulo funciona como se espera y tal es el caso que no he tenido que revisar documento para escribir el último ejemplo, posiblemente Tú también hayas llegado al mismo código.
Así que ahora ya no hay pretexto para no incluir cuando menos un -h en sus códigos heeeee!
FUENTE: https://rctorr.wordpress.com/2014/01/16/procesando-parametros-en-la-linea-de-comando-en-python/
No hay comentarios:
Publicar un comentario