argparse是否能够解析像这样的组合标志:
app.py -bcda something
在这种情况下,我希望 something
被设置为 -a
,其余部分则存储为True。基本上:app.py -b -c -d -a something
我知道大多数程序都可以这样做,例如grep -rEw
,但使用argparse实现这个功能有多难?
argparse是否能够解析像这样的组合标志:
app.py -bcda something
在这种情况下,我希望 something
被设置为 -a
,其余部分则存储为True。基本上:app.py -b -c -d -a something
我知道大多数程序都可以这样做,例如grep -rEw
,但使用argparse实现这个功能有多难?
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
action='store_true'
更加简洁。 - hpaulj通过简单的谷歌搜索,我找到了以下信息:
可以使用一个单破折号将多个短选项连接在一起,只要最后一个选项(或没有选项)需要值即可:
>>> 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