Python argparse: valor predeterminado o valor especificado

Resuelto Rob asked hace 11 años • 2 respuestas

Me gustaría tener un argumento opcional que tenga un valor predeterminado si solo está presente la bandera sin ningún valor especificado, pero almacenará un valor especificado por el usuario en lugar del valor predeterminado si el usuario especifica un valor. ¿Existe ya una acción disponible para esto?

Un ejemplo:

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

Puedo crear una acción, pero quería ver si existía una forma de hacerlo.

Rob avatar Mar 09 '13 01:03 Rob
Aceptado
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?'significa 0 o 1 argumentos
  • const=1establece el valor predeterminado cuando hay 0 argumentos
  • type=intconvierte el argumento a int

Si desea test.pyestablecerlo exampleen 1 incluso si no --examplese especifica, incluya default=1. Es decir, con

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

entonces

% test.py 
Namespace(example=1)
unutbu avatar Mar 08 '2013 18:03 unutbu

La diferencia entre:

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

y

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

es así:

myscript.py => la depuración es 7 (por defecto) en el primer caso y "Ninguno" en el segundo

myscript.py --debug => la depuración es 1 en cada caso

myscript.py --debug 2=> la depuración es 2 en cada caso

Murray avatar Feb 04 '2020 01:02 Murray