Ejecuta cualquier ejemplo en nuestra consola interactiva: Abrir consola de Python →
Argparse avanzado en Python
argparse es el módulo estándar para crear interfaces de línea de comandos (CLI). En esta guía aprenderás a crear comandos profesionales, subcomandos, validaciones, argumentos opcionales y obligatorios, tipos personalizados y CLI modulares.
Tabla de contenidos
- Argumentos básicos
- Argumentos opcionales y obligatorios
- Tipos personalizados
- Subcomandos
- Flags y booleanos
- Validación avanzada
- CLI modulares
- Ejercicios
- Mini‑proyecto
1. Argumentos básicos
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("nombre")
args = parser.parse_args()
print("Hola", args.nombre)
2. Argumentos opcionales y obligatorios
parser.add_argument("--edad", type=int, required=True)
parser.add_argument("--debug", action="store_true")
3. Tipos personalizados
def positivo(x):
x = int(x)
if x <= 0:
raise argparse.ArgumentTypeError("Debe ser positivo")
return x
parser.add_argument("--cantidad", type=positivo)
4. Subcomandos
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest="comando")
crear = sub.add_parser("crear")
crear.add_argument("nombre")
borrar = sub.add_parser("borrar")
borrar.add_argument("id")
5. Flags y booleanos
parser.add_argument("-v", "--verbose", action="store_true")
6. Validación avanzada
args = parser.parse_args()
if args.edad < 18:
parser.error("Debe ser mayor de edad")
7. CLI modulares
# cli/main.py
import argparse
from cli.comandos import registrar, eliminar
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest="cmd")
p1 = sub.add_parser("registrar")
p1.add_argument("nombre")
p2 = sub.add_parser("eliminar")
p2.add_argument("id")
args = parser.parse_args()
if args.cmd == "registrar":
registrar(args.nombre)
elif args.cmd == "eliminar":
eliminar(args.id)
8. Ejercicios
- Crea un CLI con argumentos obligatorios.
- Implementa un tipo personalizado para validar emails.
- Crea un CLI con subcomandos.
- Implementa flags de depuración.
- Haz un CLI modular con varios archivos.
# email
def email(x):
if "@" not in x: raise argparse.ArgumentTypeError("Email inválido")
return x
# subcomando
sub.add_parser("listar")
9. Mini‑proyecto: CLI profesional de gestión
import argparse
def registrar(nombre):
print("Registrado:", nombre)
def eliminar(id):
print("Eliminado:", id)
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest="cmd")
p1 = sub.add_parser("registrar")
p1.add_argument("nombre")
p2 = sub.add_parser("eliminar")
p2.add_argument("id")
args = parser.parse_args()
if args.cmd == "registrar":
registrar(args.nombre)
elif args.cmd == "eliminar":
eliminar(args.id)