argparse是否可以解析这样的组合标志:
app.py -bcda something
在这种情况下,我希望something
设置为-a
,其余的将存储为True。基本上是:
app.py -b -c -d -a something
我知道大多数程序允许这样做,例如grep -rEw
,但使用argparse执行此操作有多难?
编辑:答案是它开箱即用。我甚至懒得尝试。
答案 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