28

Is there a way to create an alias using argparse?

For example, I want to do something like this:

parser.add_argument('--foo' ...)
parser.add_argument_alias('--bar', '--foo')

That is, using --bar should be equivalent to using --foo.

jwodder
  • 54,758
  • 12
  • 108
  • 124
walkerlala
  • 1,599
  • 1
  • 19
  • 32

2 Answers2

30

You can simply call:

parser.add_argument('--foo', '--bar', ...)

at least for Python 3.5.

This is how I tested it in ipython:

In [1]: import argparse

In [2]: parser = argparse.ArgumentParser()

In [3]: parser.add_argument('--foo', '--bar')
Out[3]: _StoreAction(option_strings=['--foo', '--bar'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)

In [4]: parser.parse_args(['--foo', 'FOO'])
Out[4]: Namespace(foo='FOO')

In [5]: parser.parse_args(['--bar', 'FOO'])
Out[5]: Namespace(foo='FOO')
Jonathan
  • 4,847
  • 3
  • 32
  • 37
4

Not exactly what you asked for, but when you want to alias a key-value combination instead, as in --bar should be equivalent to using using --foo=baz, you can use the dest parameter:

parser.add_argument('--bar', dest='foo', action='store_const', const='baz')
phil294
  • 10,038
  • 8
  • 65
  • 98