在子解析器(argparser)中自定义add_argument帮助

时间:2018-07-28 19:39:36

标签: python python-3.x argparse

大家好:)

我需要有关 subparser 中的 add_parser() help 定制的帮助。

(不在此 parser 中:Python argparse: How to insert newline in the help text?)。

我已经重新定义了 _fill_text _split_lines 方法,并且对于 parser 来说一切正常:

class MultilineFormatter(argparse.HelpFormatter):
    def _fill_text(self, text, width, indent):
        return ''.join([indent + line.strip(' ') for line in text.splitlines(True)])

    def _split_lines(self, text, width):
        return [line.strip() for line in text.splitlines()]

def get_parsed_data():
    parser_ = argparse.ArgumentParser(description=("""String description parser 1
                                                  String description parser 2
                                                  String description parser 3 """),
                                  formatter_class=MultilineFormatter)

    subparsers = parser_.add_subparsers(dest="first", title="Title1", description=("""String description parser 4
                                                  String description parser 5
                                                  String description parser 6 """))
    subparsers.required = True

    example_subparser = subparsers.add_parser("sub", help="""String help parser 1
                                                         String help parser 2
                                                         String help parser 3""")
    _example_initialize_subparser(example_subparser)

    return parser_.parse_args()

def _example_initialize_subparser(parser_):
subparsers_ = parser_.add_subparsers(dest="second",
                                     description=("""String description subparser 1
                                                    String description subparser 2
                                                    String description subparser 3 """))
subparsers_.required = True

example_show_parser = subparsers_.add_parser("show", help="""String help subparser 1
                                                             String help subparser 2
                                                             String help subparser 3""")
_example_initialize_show_parser(example_show_parser)

def _example_initialize_show_parser(parser_):
parser_.add_argument("-d", "--details",
                     help="""String help subparser 4
                             String help subparser 5
                             String help subparser 6""")

没关系:(输出很漂亮,我想要的一切)

python3 main.py -h                                                                                                                                                                     !2737
usage: main.py [-h] {sub} ...

String description parser 1
String description parser 2
String description parser 3

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

Title1:
  String description parser 4
  String description parser 5
  String description parser 6

 {sub}
sub       String help parser 1
          String help parser 2
          String help parser 3
(venv)

但是,如您所见,换行符(\ n)在这里不起作用:

python3 main.py sub -h                                                                                                                                                                 !2734
usage: main.py sub [-h] {show} ...

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

subcommands:
  String description subparser 1 String description subparser 2 String
  description subparser 3

  {show}
show      String help subparser 1 String help subparser 2 String help
          subparser 3
(venv)

在这里:

python3 main.py sub show -h                                                                                                                                                            !2736
usage: main.py sub show [-h] [-d DETAILS]

optional arguments:
  -h, --help            show this help message and exit
  -d DETAILS, --details DETAILS
                    String help subparser 4 String help subparser 5 
                    String
                    help subparser 6
(venv)

那么,如何在 subparser 中使换行符起作用?

0 个答案:

没有答案