如何在argparse中降低参数帮助的缩进级别?

2022-05-06 00:00:00 python argparse

问题描述

我使用的是Python的argparse,我希望参数帮助文本的缩进较少。这是argparse正在生成的内容:

$ ./help.py -h
usage: help.py [-h] [--program-argument PROGRAM_ARGUMENT]

Description of program

optional arguments:
  -h, --help            show this help message and exit
  --program-argument PROGRAM_ARGUMENT
                        This is some help text about --program-argument. For example:

                            --program-argment "You can supply a string as the program argument"

我希望它生成类似以下内容的内容:

$ ./help.py -h
usage: help.py [-h] [--program-argument PROGRAM_ARGUMENT]

Description of program

optional arguments:
  -h, --help            show this help message and exit
  --program-argument PROGRAM_ARGUMENT
      This is some help text about --program-argument. For example:

          --program-argment "You can supply a string as the program argument"

这可以实现吗?这是我的代码:

#! /usr/bin/env python
import argparse

HELP_TEXT = """
This is some help text about --program-argument. For example:

    --program-argment "You can supply a string as the program argument"
"""


if __name__ == '__main__':
    argument_parser = argparse.ArgumentParser(
        formatter_class=argparse.RawTextHelpFormatter,
        description=('Description of program'))
    argument_parser.add_argument(
        '--program-argument',
        help=HELP_TEXT
    )
    args, unknown = argument_parser.parse_known_args()

解决方案

argparse格式化程序支持多个初始化值,有助于控制某些格式。它们都派生自HelpFormatter__init__方法。

class HelpFormatter(object):
    """Formatter for generating usage messages and argument help strings.

    Only the name of this class is considered a public API. All the methods
    provided by the class are considered an implementation detail.
    """

    def __init__(self,
                 prog,
                 indent_increment=2,
                 max_help_position=24,
                 width=None):
    # stuff

max_help_position用于确定帮助子邮件的缩进程度,因此您可以尝试将其缩减为类似1012的缩进,以减少邮件的缩进。

#!/usr/bin/env python
import argparse

HELP_TEXT = """
This is some help text about --program-argument. For example:

    --program-argment "You can supply a string as the program argument"
"""

less_indent_formatter = lambda prog: argparse.RawTextHelpFormatter(prog, max_help_position=10)


if __name__ == '__main__':
    argument_parser = argparse.ArgumentParser(
        formatter_class=less_indent_formatter,
        description=('Description of program'))
    argument_parser.add_argument(
        '--program-argument',
        help=HELP_TEXT
    )
    args, unknown = argument_parser.parse_known_args()

这将导致:

usage: help.py [-h] [--program-argument PROGRAM_ARGUMENT]

Description of program

optional arguments:
  -h, --help
          show this help message and exit
  --program-argument PROGRAM_ARGUMENT
          This is some help text about --program-argument. For example:

              --program-argment "You can supply a string as the program argument"

6的值如下:

usage: help.py [-h] [--program-argument PROGRAM_ARGUMENT]

Description of program

optional arguments:
  -h, --help
      show this help message and exit
  --program-argument PROGRAM_ARGUMENT
      This is some help text about --program-argument. For example:

          --program-argment "You can supply a string as the program argument"

相关文章