Я использую 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
Вы должны дать subparser тот же formatter_class
вы дали к главному парсер, который вы можете сделать, передав formatter_class
в add_parser
:
abcd_parser = subparsers.add_parser('abcd', formatter_class=RawTextHelpFormatter)
add_parser
принимаетany ArgumentParser constructor arguments
, я полагаю, это может быть более явным (тема возникла в баге / проблеме).