Python argparse: как управлять переносом строк на экране справки для подпарсеров? - PullRequest
0 голосов
/ 11 октября 2018

Я использую 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»аргумент в одной строке?

1 Ответ

0 голосов
/ 11 октября 2018

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

abcd_parser = subparsers.add_parser('abcd', formatter_class=RawTextHelpFormatter)
...