我正在为我的程序构建命令行argparser,并尝试在-h
选项中提供更多详细信息
我有以下代码:
import argparse
legal_actions = ['act1', 'act2', 'act3']
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='available commands')
parser_cmd = subparsers.add_parser("cmd")
parser_cmd.add_argument("-a", "--action", type=str, metavar="", choices=legal_actions, required=True,
help='list of actions: {%(choices)s}')
parser_cmd.add_argument("nargs", type=str, nargs='*',
help="the rest of the arguments required to perform an action")
parser_cmd.set_defaults(func=cmd_handler)
python prog.py cmd -h
将在命令行中显示以下打印件
usage: cmd [-h] -a [nargs [nargs ...]]
positional arguments:
nargs the rest of the arguments required to perform an action
optional arguments:
-h, --help show this help message and exit
-a , --action list of actions: {act1, act2, act3}
每个动作都需要不同数量的参数,因此我想添加一些描述动作的动作(来自动作列表),如:
actions availble:
act1: requires 2 arguments (arg1, arg2)
act2: requires 0 arguments ()
act3: requires 1 arguments (arg1)
我希望它与上面的“可选参数”有任何联系,所以很容易看到“行为”在-a选项下
答案 0 :(得分:1)
如果您想添加更多信息,可以使用epilog
- 参数:
from argparse import RawDescriptionHelpFormatter # This is used to enable newlines in epilogs and descriptions(\n)
from argparse import ArgumentParser
description = 'Some description of program'
epilog = 'actions availble:\n\t'
epilog += 'act1: requires 2 arguments (arg1, arg2)\n\t'
epilog += 'act2: requires 0 arguments ()\n\t'
epilog += 'act3: requires 1 arguments (arg1)'
parser = argparse.ArgumentParser(description=description, epilog=epilog,
formatter_class=RawTextHelpFormatter)
这将打印出来
actions availble:
act1: requires 2 arguments (arg1, arg2)
act2: requires 0 arguments ()
act3: requires 1 arguments (arg1)
在帮助输出结束时。使用epilog
时,add_parser()
- 参数也可以包含在add_subparsers()
中:
此对象有一个方法add_parser(),它接受命令名和任何ArgumentParser构造函数参数,并返回一个可以照常修改的ArgumentParser对象。
注意:默认格式化程序将忽略换行符,因此请查看解决此问题的Python argparse: How to insert newline in the help text?,其中介绍了如何替换格式化程序:
ArgumentParser(..., formatter_class=RawDescriptionHelpFormatter)
详细了解docs中的epilog参数。