I would like to have a optional argument that will default to a value if only the flag is present with no value specified, but store a user-specified value instead of the default if the user specifies a value. Is there already an action available for this?
An example:
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
I can create an action, but wanted to see if there was an existing way to do this.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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='?'means 0-or-1 argumentsconst=1sets the default when there are 0 argumentstype=intconverts the argument to int
If you want test.py to set example to 1 even if no --example is specified, then include default=1. That is, with
parser.add_argument('--example', nargs='?', const=1, type=int, default=1)
then
% test.py Namespace(example=1)
Method 2
The difference between:
parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)
and
parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)
is thus:
myscript.py => debug is 7 (from default) in the first case and “None” in the second
myscript.py --debug => debug is 1 in each case
myscript.py --debug 2 => debug is 2 in each case
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0