Python argparse允许组合标志

时间:2014-01-22 14:52:25

标签: python command-line-arguments argparse

argparse是否可以解析这样的组合标志:

app.py -bcda something

在这种情况下,我希望something设置为-a,其余的将存储为True。基本上是:

app.py -b -c -d -a something

我知道大多数程序允许这样做,例如grep -rEw,但使用argparse执行此操作有多难?

  

编辑:答案是它开箱即用。我甚至懒得尝试。

2 个答案:

答案 0 :(得分:4)

您可以使用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

答案 1 :(得分:1)

这是我通过一点谷歌搜索找到的:

  

可以将几个短选项连接在一起,只使用一个 -   前缀,只要最后一个选项(或者没有一个)需要一个   值:

>>> 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