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

1

Я использую Python 3.6.3 и имею этот кусок кода:

import argparse
from argparse import RawTextHelpFormatter

parser = argparse.ArgumentParser(prog='foobar',
                                     formatter_class=RawTextHelpFormatter)
parser.add_argument('-lf', '--logfile', dest='logfile', default='/dev/null',
                    help='some very long help message goes here ..............................\n' +
                   'more text here xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')

subparsers = parser.add_subparsers()
abcd_parser = subparsers.add_parser('abcd')

abcd_parser.add_argument('zzz', nargs='+',
                         help='A very long help message\ngoes here...... more help text goes here zzzzzzz   zzzzzzzzzzzzzzzzzzzzzzz  ')


args = parser.parse_args()

Выход справки выглядит так:

$ ./foobar  -h
usage: foobar [-h] [-lf LOGFILE] {abcd} ...

positional arguments:
  {abcd}

optional arguments:
  -h, --help            show this help message and exit
  -lf LOGFILE, --logfile LOGFILE
                        some very long help message goes here ..............................
                        more text here xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Вышеприведенный вывод не обертывает текст справки, как и ожидалось (кроме случаев, когда я явно помещался в "\n")

Однако выход справки для подпараметра выглядит так:

$ ./foobar  abcd  -h
usage: foobar abcd [-h] zzz [zzz ...]

positional arguments:
  zzz         A very long help message goes here...... more help text goes
              here zzzzzzz zzzzzzzzzzzzzzzzzzzzzzz

optional arguments:
  -h, --help  show this help message and exit
  1. Как я могу получить "идет здесь" для печати на новой строке (я указал "\n", но это не сработало)
  2. Как я могу отключить перенос строки, чтобы весь текст справки для аргумента "zzz" находился в одной строке?
  • 0
    docs.python.org/3/library/argparse.html#sub-commands - говорит, что add_parser принимает any ArgumentParser constructor arguments , я полагаю, это может быть более явным (тема возникла в баге / проблеме).
Теги:
argparse
python-3.6

1 ответ

0
Лучший ответ

Вы должны дать subparser тот же formatter_class вы дали к главному парсер, который вы можете сделать, передав formatter_class в add_parser:

abcd_parser = subparsers.add_parser('abcd', formatter_class=RawTextHelpFormatter)
  • 0
    Спасибо ... это сработало. Я думал, что уже попробовал это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню