【问题标题】:How to have two independent groups [duplicate]如何拥有两个独立的组[重复]
【发布时间】:2017-01-26 01:55:39
【问题描述】:

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

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)

但是,正如 cmets 所指示的那样,现在任何不允许的操作都不会引发错误。

【问题讨论】:

    标签: python python-2.7 argparse


    【解决方案1】:

    参数组不会嵌套在互斥组内。尽管有名字,但这两种团体有不同的目的。

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

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

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

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

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

    在其他 argparse 问题中以一种或其他方式对此进行了讨论。侧边栏似乎找到了一些可能的匹配项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多