gpt4 book ai didi

python - argparse 与 argument_groups 和 mutually_exclusive_group

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:16 25 4
gpt4 key购买 nike

我有以下内容:

def parser():
p = argparse.ArgumentParser()
people = p.add_argument_group('people_list')
meg = people.add_mutually_exclusive_group()
meg.add_argument('--config-file')
g = meg.add_argument_group('people')
g.add_argument('--name')
g.add_argument('--age')
return p

p = parser()

p.parse_args(['--config-file', 'cfg_file', '--name', 'Bob', '--age', '3'])

我预计这会因 mutually_exclusive 组而提示。请注意,这是实际代码的片段,我需要使用几个 argument_groups,但在此 argument_group('people_list') 中,我希望用户指定配置文件或任何其他参数。

所以,我的用户应该能够说

prog --config-file cfg_file

prog --name Bob --age 3

但不是

prog --config-file cfg_file --name Bob --age 3

我在这里做错了什么?

最佳答案

这是帮助:

usage: foo [-h] [--config-file CONFIG_FILE] [--name NAME]
[--age AGE]

optional arguments:
-h, --help show this help message and exit

people_list:
--config-file CONFIG_FILE

people这样的参数组控制帮助热线的显示方式。因此,标题为 people_list 的部分。

互斥组控制用法的格式,并检查参数的共现性。从技术上讲,它是参数组的子类,但这两种组没有太多交互。

您可以在参数组中嵌套互斥组,就像您在此处所做的那样。但是您不能将一个参数组嵌套在另一个组中(无论哪种)。或者更确切地说,它会接受这样的定义,但它没有做任何特别的事情。因此,nameage 已添加到解析器中(如使用中所示),但未添加到 megpeople。如果您将一个互斥组添加到另一个 MXGroup,效果只是创建一个大的平面组。

因此,除了一个小异常(exception)之外,不要尝试将一个组嵌套在另一个组中。他们的定义不够通用,无法以这种方式做任何有用的事情。

如果将nameage添加到meg,那么帮助将是:

usage: foo [-h]
[--config-file CONFIG_FILE | --name NAME | --age AGE]

optional arguments:
-h, --help show this help message and exit

people_list:
--config-file CONFIG_FILE
--name NAME
--age AGE

这将反对将config-filenameage一起使用。但它也会反对同时使用nameage

存在要求通用嵌套的相互 xxx 组的错误问题。一旦实现,它就可以处理这种通用逻辑。但目前还不能。假设您可以设置所需的测试,那么理想的使用线会是什么样子?设置测试相对容易,但生成有意义的使用则困难得多。

目前我建议编写您自己的用法。使用argument groups 对参数帮助行进行分组。解析后进行自己的交互测试。您可以使用 p.error... 生成错误消息。如果您明智地选择默认值,那么测试参数并不难,例如

if args.config_file is not None and 
(args.name is not None or args.age is not None):
p.error('...')

关于python - argparse 与 argument_groups 和 mutually_exclusive_group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28549777/

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