2013-05-20 93 views
3

之一,我有可以通过以下方式来使用的程序:Python的argparse选择几个可选参数

program install -a arg -b arg 
program list 
program update 

有永远只能是(installlistupdate)指定的位置参数之一。并且install方案中只能有其他参数。

argparse文档有点密集,我很难弄清楚如何正确地做到这一点。我的add_argument应该是什么样子?

+1

你看过[argparse教程](http://docs.python.org/2.7/howto/argparse.html)吗? –

+0

@JonathonReinhart,不,我没有感谢这个链接。我会看到我能从中得到什么。 – n0pe

+1

@TankyWoo,阅读我问题的最后一段。此外,将这些信息放在SO上可以让其他人更容易找到相同的信息。如果RTFM是一揽子规则,则SO不存在。 – n0pe

回答

9

这看起来像你想使用subparsers

from argparse import ArgumentParser 

parser = ArgumentParser() 
subparsers = parser.add_subparsers() 

install = subparsers.add_parser('install') 
install.add_argument('-b') 
install.add_argument('-a') 
install.set_defaults(subparser='install') 

lst = subparsers.add_parser('list') 
lst.set_defaults(subparser='list') 

update = subparsers.add_parser('update') 
update.set_defaults(subparser='update') 

print parser.parse_args() 

如文档指出,我与set_defaults相结合,这样就可以知道被调用了哪些子分析器。

+0

这看起来不错,很容易。我会在接受之前尝试一下。 – n0pe

+0

就像我需要的那样工作,但是,在这种情况下,我不知道是否已经调用了list或update,因为它们都返回空字典。如果有内置的方式可以让我区分这两者? – n0pe

+0

@MaxMackie - 那里有'set_default'进来。 – mgilson

相关问题