gpt4 book ai didi

argparse - 使用 argparse 只接受一组必需的参数

转载 作者:行者123 更新时间:2023-12-03 19:39:24 28 4
gpt4 key购买 nike

我正在尝试使用 parser = argparse.ArgumentParser对于我写的一个小程序。

程序接受作为输入 EITHER ( txt 文件的路径 ) OR ( opt1 && opt2 && opt3 ) .

这意味着如果用户想使用 txt 文件作为输入,他不能提供 opt如果他提供任何 opt - 他必须提供所有 3 个并且不能提供 a path to a txt file .

我尝试使用 add_mutually_exclusive_group但不确定如何,因为第二组参数本​​身就是一个组。

这是我到目前为止尝试过的:

import argparse
parser = argparse.ArgumentParser(description='this is the description',)

root_group = parser.add_mutually_exclusive_group()

group_list = root_group.add_mutually_exclusive_group()
group_list.add_argument('-path', help='path to the txt file')

group_list = root_group.add_mutually_exclusive_group()
group_list.add_argument('-opt1', help='opt1')
group_list.add_argument('-opt2', help='opt2')
group_list.add_argument('-opt3', help='opt3')

args = parser.parse_args()

——
python tests.py -path txt -opt1 asdasd
usage: tests.py [-h] [[-path PATH] [-opt1 OPT1 | -opt2 OPT2 | -opt3 OPT3]
tests.py: error: argument -opt1: not allowed with argument -path
path不允许与 opt 一起使用- 这正是我想要的。

但我希望如果用户提供甚至 1 opt他将不得不提供所有这些。

我也希望至少有 1 组满意。

最佳答案

互斥组不是为嵌套而设计的。它接受您的代码,但最终效果是使 4 个参数独占。它将只接受 path 之一, opt1 , opt2 , 等等。

虽然我已经探索了定义嵌套组,并允许 anyand组内操作,这样的功能还有很长的路要走。

由于您的用户必须提供所有 3 --opt我建议将其浓缩为一个论点:

root_group.add_argument('--opt', nargs=3)
root_group.add_argument('--path')

用法应该看起来像
usage: tests.py [-h]  [--path PATH | --opt OPT OPT OPT]

将其与允许 nested inclusive groups 的假设用法进行对比。 :
[-path PATH | [-opt1 OPT1 & -opt2 OPT2 & -opt3 OPT3]]

============

使用元组元变量,可以将用法细化为:
g.add_argument('--opt',nargs=3,metavar=('OPT1','OPT2','OPT3'))

usage: ipython3 [-h] [--path PATH | --opt OPT1 OPT2 OPT3]

==============

您的另一个选择是编写自定义 usage并在解析后执行您自己的逻辑测试。

关于argparse - 使用 argparse 只接受一组必需的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41698895/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com