Python argparse 没有正确显示帮助信息
Python argparse doesn't show up help message correctly
我必须解析参数,其中 4 个必须相互关联,最后 2 个必须互斥
第 1 组 sub_exclusive_1
有 4 个参数,如果其中任何一个已定义,则必须定义所有参数。
第 2 组 sub_exclusive_2
有 2 个参数,其中只有 1 个可以定义,但前提是第 1 组的 none 已被定义。
parser = argparse.ArgumentParser(description='Main Description', epilog='Main Epilog')
group_exclusive = parser.add_argument_group('Exclusive')
root_exclusive = group_exclusive.add_mutually_exclusive_group()
sub_exclusive_1 = root_exclusive.add_argument_group()
sub_exclusive_1.add_argument("--firstList", action='store', help = "Help for firstList")
sub_exclusive_1.add_argument("--secondList", action='store', help = "Help for secondList")
sub_exclusive_1.add_argument("--thirdList", action='store', help = "Help for thirdList")
sub_exclusive_1.add_argument("--fourthList", action='store', help = "Help for fourthList")
sub_exclusive_2 = root_exclusive.add_mutually_exclusive_group()
sub_exclusive_2.add_argument("--last", action='store_true', help = "Help for Last")
sub_exclusive_2.add_argument("--first", action='store_true', help = "Help for First")
问题是:
不能将第 1 组参数相互联系起来。
当设置 sub_exclusive_1
为 add_argument_group
而不是
add_mutually_exclusive_group
、firstList ... fourthList
未显示在
运行 程序带有 -h
选项时的帮助部分。
有什么解决办法吗?
第 1 组不应是四个单独的参数,而是具有 4 个参数的单个选项:
add_argument("--arg", nargs=4)
那么command --arg1 2 --arg2 3 --arg3 5 --arg4 7
就变成了command --arg 2 3 5 7
;您需要相应地调整您的代码。一种选择是在解析后调整存储在命名空间中的值:
args = p.parse_args()
# Unpack the 4-tuple into the destinations used by your original parser
args.arg1, args.arg2, args.arg3, args.arg4 = args.arg
另一种方法是为 --arg
定义一个自定义操作,它会立即将 4 个值分配给命名空间中的正确目标。
那么你可以定义一个包含--arg
、--first
和--last
的独占组。
我从你的代码中得到的 print_help
是
In [420]: parser.print_help()
usage: ipython3 [-h] [--firstList FIRSTLIST] [--secondList SECONDLIST]
[--thirdList THIRDLIST] [--fourthList FOURTHLIST]
[[--last | --first]
optional arguments:
-h, --help show this help message and exit
Exclusive:
--last Help for Last
--first Help for First
所有参数都出现在 usage
中,但只有 exclusive_group
出现在帮助中。用法中这个组的括号乱七八糟。
argparse
没有提供一种机制来做你想做的事。有一些提议的补丁可能会让你到达那里,但现在没有。
A 'argument group' 只是一个帮助行显示机制。它不影响使用格式,也不影响解析。此外,不能嵌套参数组 - 接受参数,但不会出现在帮助中。
互斥组可以嵌套在参数组中(用于帮助行显示)。但效果只是在该组中显示其参数。
如果您希望 'first'、'second' 等一起出现,请将它们设为 nargs=4
参数的值,或者在解析后测试它们。类似于:
group = [args.first, args.second, args.third, args.fourth]
if any([x is None for x in group]):
parser.error('all of the inclusive group is required')
我可以向您指出处理 'nested inclusive groups' 的错误问题,但现在这对您没有帮助。
我必须解析参数,其中 4 个必须相互关联,最后 2 个必须互斥
第 1 组 sub_exclusive_1
有 4 个参数,如果其中任何一个已定义,则必须定义所有参数。
第 2 组 sub_exclusive_2
有 2 个参数,其中只有 1 个可以定义,但前提是第 1 组的 none 已被定义。
parser = argparse.ArgumentParser(description='Main Description', epilog='Main Epilog')
group_exclusive = parser.add_argument_group('Exclusive')
root_exclusive = group_exclusive.add_mutually_exclusive_group()
sub_exclusive_1 = root_exclusive.add_argument_group()
sub_exclusive_1.add_argument("--firstList", action='store', help = "Help for firstList")
sub_exclusive_1.add_argument("--secondList", action='store', help = "Help for secondList")
sub_exclusive_1.add_argument("--thirdList", action='store', help = "Help for thirdList")
sub_exclusive_1.add_argument("--fourthList", action='store', help = "Help for fourthList")
sub_exclusive_2 = root_exclusive.add_mutually_exclusive_group()
sub_exclusive_2.add_argument("--last", action='store_true', help = "Help for Last")
sub_exclusive_2.add_argument("--first", action='store_true', help = "Help for First")
问题是:
不能将第 1 组参数相互联系起来。
当设置
sub_exclusive_1
为add_argument_group
而不是add_mutually_exclusive_group
、firstList ... fourthList
未显示在 运行 程序带有-h
选项时的帮助部分。
有什么解决办法吗?
第 1 组不应是四个单独的参数,而是具有 4 个参数的单个选项:
add_argument("--arg", nargs=4)
那么command --arg1 2 --arg2 3 --arg3 5 --arg4 7
就变成了command --arg 2 3 5 7
;您需要相应地调整您的代码。一种选择是在解析后调整存储在命名空间中的值:
args = p.parse_args()
# Unpack the 4-tuple into the destinations used by your original parser
args.arg1, args.arg2, args.arg3, args.arg4 = args.arg
另一种方法是为 --arg
定义一个自定义操作,它会立即将 4 个值分配给命名空间中的正确目标。
那么你可以定义一个包含--arg
、--first
和--last
的独占组。
我从你的代码中得到的 print_help
是
In [420]: parser.print_help()
usage: ipython3 [-h] [--firstList FIRSTLIST] [--secondList SECONDLIST]
[--thirdList THIRDLIST] [--fourthList FOURTHLIST]
[[--last | --first]
optional arguments:
-h, --help show this help message and exit
Exclusive:
--last Help for Last
--first Help for First
所有参数都出现在 usage
中,但只有 exclusive_group
出现在帮助中。用法中这个组的括号乱七八糟。
argparse
没有提供一种机制来做你想做的事。有一些提议的补丁可能会让你到达那里,但现在没有。
A 'argument group' 只是一个帮助行显示机制。它不影响使用格式,也不影响解析。此外,不能嵌套参数组 - 接受参数,但不会出现在帮助中。
互斥组可以嵌套在参数组中(用于帮助行显示)。但效果只是在该组中显示其参数。
如果您希望 'first'、'second' 等一起出现,请将它们设为 nargs=4
参数的值,或者在解析后测试它们。类似于:
group = [args.first, args.second, args.third, args.fourth]
if any([x is None for x in group]):
parser.error('all of the inclusive group is required')
我可以向您指出处理 'nested inclusive groups' 的错误问题,但现在这对您没有帮助。