我的程序有两个功能。一个没有任何参数运行,另一个可以有可选参数。这些团体不会互相干扰。
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)
然而,如同评论所示,现在两个不允许的操作都没有出现错误。
答案 0 :(得分:1)
参数组不会嵌套在互斥组中。尽管名称不同,但这两种群体的目的不同。
参数组帮助显示中的组参数。它们在解析过程中什么也不做。
互斥组测试参数的出现次数,并尝试在使用行中显示。
您可以--export
和--run
互斥。但它不会阻止l
或d
与run一起使用。但你可以忽略这些价值观。或者您可以在解析后进行自己的测试,并抱怨这一点。
在使用行中表示此约束的有意义的方法是什么?您可能需要自定义它。
另一种可能性是使用subparser。这可能更适合你的情况。出口'解析器将定义与之一起使用的参数。 '运行'不会接受任何进一步的论点。
在某种方式中,这已在其他argparse问题中讨论过。侧边栏似乎找到了一些可能的匹配。