如何将位置参数与可选参数组合?

时间:2015-10-25 10:40:25

标签: python argparse

假设我对myprog有一些用法:

myprog.py [-h] [-d DEPTH] [-v] [--version] URL [URL ...]

现在我只想在指定单个位置参数-d DEPTH时允许URL选项。例如,这是一个正确的cmd:

my_prog.py http://stackoverflow.com -d 5
my_prog.py http://stackoverflow.com http://google.com

但不应该允许这个(网站的数量多于一个):

my_prog.py http://stackoverflow.com http://google.com -d 5

所以,现在我试图检查这种情况如下:

parser = get_parser()
args = vars(parser.parse_args())

if args['depth'] > 1:
        if len(args['url']) != 1:
            parser.error('DEPTH parameter is allowed with single URL')
            return

我认为这个解决方案并不是很好。

1 个答案:

答案 0 :(得分:0)

据推测,你也想禁止

my_prog.py -d 5 http://stackoverflow.com http://google.com

即,在URL参数之前指定-d时。由于参数可以按任意顺序给出,因此在解析完成后测试它们是最有意义的 - 正如您所做的那样。

可以构建自定义Action类来测试这样的事情,但逻辑会变得更复杂。 ' url'行动必须测试以前的' -d'设置和' -d'将不得不测试' url'属性等。