pythons argparse:在-h中定义选项

时间:2018-02-13 15:09:58

标签: python argparse

我正在为我的程序构建命令行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选项下

1 个答案:

答案 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参数。