Python argparse: valor predeterminado o valor especificado
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.
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 argumentosconst=1
establece el valor predeterminado cuando hay 0 argumentostype=int
convierte el argumento a int
Si desea test.py
establecerlo example
en 1 incluso si no --example
se especifica, incluya default=1
. Es decir, con
parser.add_argument('--example', nargs='?', const=1, type=int, default=1)
entonces
% test.py
Namespace(example=1)
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