Python argparse: как вставить новую строку в текст справки в подпараллеле?

Этот вопрос связан с вопросом заданным ранее, но может быть несвязанным. Вопрос: как использовать символы новой строки в тексте справки в данном (рабочем) примере ниже, при использовании подпараметров?

import argparse

parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)

subparsers = parser.add_subparsers()

parser_start = subparsers.add_parser('stop')
parser_start.add_argument("file", help = "firstline\nnext line\nlast line")

print parser.parse_args()

Мой вывод выглядит следующим образом:

tester.py  stop -h
usage: tester.py stop [-h] file

positional arguments:
  file        firstline next line last line

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

Ожидаемый вывод для справки на file должен быть:

first line
next line
last line

Ответ 1

Метод subparsers.add_parser() принимает те же аргументы конструктора ArgumentParser, что и argparse.ArgumentParser(). Таким образом, чтобы использовать RawTextHelpFormatter для подпарамера, вам нужно явно указать formatter_class, когда вы добавляете подпараметр.

>>> import argparse
>>> parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
>>> subparsers = parser.add_subparsers()

Измените эту строку, чтобы установить formatter_class подпарщика:

>>> parser_start = subparsers.add_parser('stop', formatter_class=argparse.RawTextHelpFormatter)

Теперь ваш текст справки будет содержать символы новой строки:

>>> parser_start.add_argument("file", help="firstline\nnext line\nlast line")
_StoreAction(option_strings=[], dest='file', nargs=None, const=None, default=None, type=None, choices=None, help='firstline\nnext line\nlast line', metavar=None)

>>> print parser.parse_args(['stop', '--help'])
usage:  stop [-h] file

positional arguments:
  file        firstline
              next line
              last line

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