argparse add_argument别名

问题描述 投票:0回答:3
有一种方法可以使用argparse创建别名?

,例如,我想做这样的事情:

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

也就是,使用
--bar

应该等同于使用

--foo
.

您可以简单地致电:
python argparse
3个回答
33
投票
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')

完全不是您要求的,但是当您想脱离

6
投票
组合时,例如在

--bar中应该等同于使用--foo=baz

时,您可以使用
dest
参数:
parser.add_argument('--bar', dest='foo', action='store_const', const='baz')

我也有同样的问题,并为此写了一个软件包

0
投票
。它是SYS.ARGV预处理器的工作,将

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.