[lang-ref] ( parse_positional_args_variant ) ( python )
def test_parse_positional_args_variant():
# nargs
# Examples of positional arguments with nargs
import argparse
# Optional positional argument
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('PARAM1', nargs='?') # 0..1 value
args = parser.parse_args([])
assert args.PARAM1 is None
args = parser.parse_args(['A'])
assert args.PARAM1 == 'A'
# A more complex case (for demonstration only; not recommended as an interface)
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('PARAM1', nargs='?') # 0..1 value
parser.add_argument('PARAM2', nargs='*') # 0..n values (list)
parser.add_argument('PARAM3', nargs='+') # 1..n values (list)
# Satisfying the required argument (PARAM3) takes precedence
args = parser.parse_args(['A'])
assert args.PARAM1 is None
assert args.PARAM2 == []
assert args.PARAM3 == ['A']
# Once the required part is satisfied, earlier arguments can take values
args = parser.parse_args(['A', 'B', 'C', 'D'])
assert args.PARAM1 == 'A'
assert args.PARAM2 == ['B', 'C']
assert args.PARAM3 == ['D']