如何拥有两个独立的小组

时间:2016-09-18 07:26:49

标签: python python-2.7 argparse

我的程序有两个功能。一个没有任何参数运行,另一个可以有可选参数。这些团体不会互相干扰。

import argparse

parser = argparse.ArgumentParser()

root_group = parser.add_mutually_exclusive_group()

group_export = root_group.add_argument_group()
group_export.add_argument('--export', action='store_true', help='Exports data from database')
group_export.add_argument('-l', action='append', help='Reduce output with league name')
group_export.add_argument('-d', action='append', help='Reduce output with date range')

group_run = root_group.add_argument_group()
group_run.add_argument('--run', action='store_true', help='Start gathering of data')

我希望允许这样做:

python file.py --export -l name1 -l name2 -d 1/1/2015
python file.py --export
python file.py --run

这是不允许的:

python file.py --run --export  # Namespace(d=None, export=True, l=None, run=True)

python file.py --run -l name1  # Namespace(d=None, export=False, l=['name1'], run=True)

然而,如同评论所示,现在两个不允许的操作都没有出现错误。

1 个答案:

答案 0 :(得分:1)

参数组不会嵌套在互斥组中。尽管名称不同,但这两种群体的目的不同。

参数组帮助显示中的组参数。它们在解析过程中什么也不做。

互斥组测试参数的出现次数,并尝试在使用行中显示。

您可以--export--run互斥。但它不会阻止ld与run一起使用。但你可以忽略这些价值观。或者您可以在解析后进行自己的测试,并抱怨这一点。

在使用行中表示此约束的有意义的方法是什么?您可能需要自定义它。

另一种可能性是使用subparser。这可能更适合你的情况。出口'解析器将定义与之一起使用的参数。 '运行'不会接受任何进一步的论点。

在某种方式中,这已在其他argparse问题中讨论过。侧边栏似乎找到了一些可能的匹配。