¿Cómo puedo leer y procesar (analizar) argumentos de línea de comando?

Resuelto asked hace 15 años • 22 respuestas

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? .

 avatar Jun 18 '09 05:06
Aceptado
import sys

print("\n".join(sys.argv))

sys.argves 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:])
John Slavick avatar Jun 17 '2009 22:06 John Slavick

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()

argparsesoporta (entre otras cosas):

  • Múltiples opciones en cualquier orden.
  • Opciones cortas y largas.
  • Valores predeterminados.
  • Generación de un mensaje de ayuda al uso.
Ayman Hourieh avatar Jun 17 '2009 22:06 Ayman Hourieh

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_argsy 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 como STORE_ACTIONSo CHECK_METHODSpara obtener una verificación adecuada de los argumentos.
Silfheed avatar Jun 26 '2009 18:06 Silfheed