2016-09-18 94 views
0

我的程序有两个功能。一个没有任何参数运行,另一个可以有可选的参数。这些群体不能相互干扰。如何拥有两个独立的组

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

参数组不嵌套在互斥组中。尽管有这些名字,但这两类群体有不同的目的。

参数在帮助显示中分组参数。他们在分析过程中什么都不做。

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

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

什么是在使用线中表示这种约束的有意义的方式?您可能需要自定义。

另一种可能性是使用子分析器。这可能会更好地适合你的情况。 “导出”解析器将定义与之配合的参数。 '跑'不会接受任何进一步的论据。

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