[lang-ref] ( parse_optional_args ) ( python )
def test_parse_optional_args():
import argparse
# Optional arguments start with '-'
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--input-filename') # action='store' (default), type=str (default), default=None
parser.add_argument('--prefix', '-p', default='test.')
parser.add_argument('--enable-debug', action='store_true') # default: opposite (in this case: False)
parser.add_argument('--line-limit', type=int)
# check default value
args = parser.parse_args([])
assert args.input_filename is None
assert args.prefix == 'test.'
assert args.enable_debug is False
assert args.line_limit is None
# Can't access with short name as variable
with pytest.raises(AttributeError):
args.p
# get value
args = parser.parse_args(['--input-filename=a.txt', '--prefix=dummy.', '--enable-debug', '--line-limit=3'])
assert args.input_filename == 'a.txt'
assert args.prefix == 'dummy.'
assert args.enable_debug is True
assert args.line_limit == 3
# short option can be combined
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--enable-a', '-a', action='store_true')
parser.add_argument('--enable-b', '-b', action='store_true')
parser.add_argument('--enable-c', '-c', action='store_true')
args = parser.parse_args(['-ab'])
assert args.enable_a is True
assert args.enable_b is True
assert args.enable_c is False