¿Cómo puedo leer y procesar (analizar) argumentos de línea de comando?
En Python, ¿cómo podemos encontrar los argumentos de la línea de comando que se proporcionaron para un script y procesarlos?
Lectura básica relacionada: ¿Qué significa "sys.argv[1]"? (¿Qué es sys.argv y de dónde viene?) . Para ver algunos ejemplos más específicos, consulte ¿Implementar una interfaz de línea de comandos de estilo "[comando] [acción] [parámetro]"? y ¿ Cómo puedo formatear la ayuda del argumento posicional usando optparse de Python? .
import sys
print("\n".join(sys.argv))
sys.argv
es una lista que contiene todos los argumentos pasados al script en la línea de comando. sys.argv[0]
es el nombre del script.
Básicamente,
import sys
print(sys.argv[1:])
La solución canónica en la biblioteca estándar es argparse
( docs ):
Aquí hay un ejemplo:
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
args = parser.parse_args()
argparse
soporta (entre otras cosas):
- Múltiples opciones en cualquier orden.
- Opciones cortas y largas.
- Valores predeterminados.
- Generación de un mensaje de ayuda al uso.
Simplemente andar evangelizando para argparse , que es mejor por estas razones... esencialmente:
(copiado del enlace)
El módulo argparse puede manejar argumentos posicionales y opcionales, mientras que optparse solo puede manejar argumentos opcionales.
argparse no es dogmático sobre cómo debería verse su interfaz de línea de comando: se admiten opciones como -file o /file, al igual que las opciones requeridas. Optparse se niega a admitir estas características y prefiere la pureza a la practicidad.
argparse produce mensajes de uso más informativos, incluido el uso de la línea de comandos determinado a partir de sus argumentos, y mensajes de ayuda para argumentos posicionales y opcionales. El módulo optparse requiere que escriba su propia cadena de uso y no tiene forma de mostrar ayuda para los argumentos posicionales.
argparse admite acciones que consumen una cantidad variable de argumentos de la línea de comandos, mientras que optparse requiere que se conozca de antemano el número exacto de argumentos (por ejemplo, 1, 2 o 3).
argparse admite analizadores que envían subcomandos, mientras que optparse requiere configurar
allow_interspersed_args
y realizar el envío del analizador manualmente
Y mi favorito personal:
- argparse permite especificar los parámetros de tipo y acción
add_argument()
con invocables simples, mientras que optparse requiere piratear atributos de clase comoSTORE_ACTIONS
oCHECK_METHODS
para obtener una verificación adecuada de los argumentos.