,例如,我想做这样的事情:
parser.add_argument('--foo' ...)
parser.add_argument_alias('--bar', '--foo')
也就是,使用
--bar
应该等同于使用
--foo
.。您可以简单地致电:
parser.add_argument('--foo', '--bar', ...)
至少适用于Python3.5.
这是我在
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')
完全不是您要求的,但是当您想脱离--bar
中应该等同于使用--foo=baz
时,您可以使用
dest
参数:
parser.add_argument('--bar', dest='foo', action='store_const', const='baz')
我也有同样的问题,并为此写了一个软件包sys.argv
转换为“规范”形式(例如,将--bar
替换为
--foo
或
sh
to
show
等)。它也适用于地下者。并且它与所有其他参数解析器兼容,例如Click或Typer。
import argparse
import argalias
import sys
# our micro argparse section for demo purposes
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
# argalias parting first
aa = argalias.ArgAlias()
# --foo is canonical name, --bar and --baz are aliases
aa.alias('--foo', '--bar', '--baz')
aa.parse()
print(sys.argv)
print(parser.parse_args())
python foobar.py --bar 123
['foobar.py', '--foo', '123']
Namespace(foo='123')
ArgParse的其他功能(在这里跳过了简洁)是指定前缀以在正确的位置解决别名,例如解析sh
如果是在show
(project
,
p
)之后或之后的(
pr
,
student
)之后进行的。但是
st
不会被替换为
s
。