如何拥有两个独立的群体



我的程序有两个功能。一个运行时不带任何参数,另一个可以有可选参数。组间不能相互干扰。

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)

然而,正如注释所指出的那样,到目前为止,两个被禁止的操作都不会产生错误。

参数组不能嵌套在互斥组中。尽管名称相同,但这两种组有不同的用途。

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

互斥组测试参数是否出现,并尝试在用法行中显示。

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

在用法行中表示这个约束的有意义的方式是什么?你可能需要自定义。

另一种可能性是使用子解析器。那可能更适合你的情况。'export'解析器将定义与之一起工作的参数。'run'不接受任何进一步的参数。

无论如何,这个问题已经在其他大问题中讨论过了。侧栏似乎找到了一些可能的匹配

最新更新