Python argparse允许组合标志

10

argparse是否能够解析像这样的组合标志:

app.py -bcda something
在这种情况下,我希望 something 被设置为 -a ,其余部分则存储为True。基本上:
app.py -b -c -d -a something

我知道大多数程序都可以这样做,例如grep -rEw,但使用argparse实现这个功能有多难?


2
正如Chris Barker所指出的那样,答案是使用“-bcda”而不是“-abcd”。组合是一些可以直接使用的东西。 - Ray
2个回答

6
您可以使用store_const来实现此功能:
parser = argparse.ArgumentParser()
parser.add_argument('-a', action='store_const', const=True, default=False)
parser.add_argument('-b', action='store_const', const=True, default=False)
args = parser.parse_args()

然后你可以通过命令行使用-a -b或者-ab(或者-a, 或者 -b)来调用它。

编辑:如果你想让其中一个标志带有参数,你需要将其作为链的最后一项传递。所以如果a需要一个参数,你需要这样做:-bcda something


3
action='store_true' 更加简洁。 - hpaulj

2

通过简单的谷歌搜索,我找到了以下信息:

可以使用一个单破折号将多个短选项连接在一起,只要最后一个选项(或没有选项)需要值即可:

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-x', action='store_true')
>>> parser.add_argument('-y', action='store_true')
>>> parser.add_argument('-z')
>>> parser.parse_args('-xyzZ'.split())
Namespace(x=True, y=True, z='Z')

http://docs.python.org/dev/library/argparse.html#option-value-syntax


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接