dkiselev
dkiselev

Reputation: 940

Check argparse argument set, or used default, or overriden

I want to achive next behaviour:

python script.py 
> my_arg is None

python script.py --my-arg
> my_arg is "default"

python script.py --my-arg some_value
> my_arg is "some_value"

How to configure this argument for Argparser?

What I've tried so far:

#!/usr/bin/env python
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--my-argument', nargs='?', default='default')
args = parser.parse_args()

print(args.my_argument)

But for test.py I've got default

Upvotes: 6

Views: 1263

Answers (2)

dkiselev
dkiselev

Reputation: 940

Found solution here Python argparse: default value or specified value

My script looks like:

#!/usr/bin/env python
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--my-argument', nargs='?', const='default')
args = parser.parse_args()

print(args.my_argument)

Upvotes: 4

falsetru
falsetru

Reputation: 369044

How about this? Using append action to distinguish non-specified case / --my-arg specified case:

>>> import argparse
>>> 
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--my-arg', action='append', nargs='?', default=[])
>>> def parse(argv):
...     args = parser.parse_args(argv)
...     if not args.my_arg:
...         return None
...     return args.my_arg[0] or 'default'
... 
>>> parse([])  # python script.py
>>> parse(['--my-arg'])  # python script.py --my-arg
'default'
>>> parse(['--my-arg', 'some_value'])  # python script.py --my-arg some_value
'some_value'

Upvotes: 1

Related Questions