Управление форматированием списка аргументов argparse? - PullRequest
24 голосов
/ 28 марта 2011
import argparse
parser = argparse.ArgumentParser(prog='tool')
args = [('-u', '--upf', 'ref. upf', dict(required='True')),
        ('-s', '--skew', 'ref. skew', {}),
        ('-m', '--model', 'ref. model', {})]
for args1, args2, desc, options in args:  
     parser.add_argument(args1, args2, help=desc, **options)

parser.print_help()

Вывод:

usage: capcheck [-h] -u UPF [-s SKEW] [-m MODEL]

optional arguments:
  -h, --help            show this help message and exit
  -u UPF, --upf UPF     ref. upf
  -s SKEW, --skew SKEW  ref. skew
  -m MODEL, --model MODEL
                        ref. model

Как печатать исх.модель в той же строке, что и -m MODEL, --model MODEL вместо той, которая появляется в отдельной строке, когда я запускаю сценарий с параметром -h?

Ответы [ 2 ]

25 голосов
/ 29 марта 2011

Вы можете указать formatter_class аргумент:

parser = argparse.ArgumentParser(prog='tool',
  formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=27))

args = [('-u', '--upf', 'ref. upf', dict(required='True')),
        ('-s', '--skew', 'ref. skew', {}),
        ('-m', '--model', 'ref. model', {})]
for args1, args2, desc, options in args:  
     parser.add_argument(args1, args2, help=desc, **options)

parser.print_help()

Примечание. Реализация argparse.HelpFormatter является частной, только имя является публичным.Поэтому код может перестать работать в будущих версиях argparse.Подайте запрос функции, чтобы предоставить общедоступный интерфейс для настройки max_help_position на http://bugs.python.org/

Выход

usage: tool [-h] -u UPF [-s SKEW] [-m MODEL]

optional arguments:
  -h, --help               show this help message and exit
  -u UPF, --upf UPF        ref. upf
  -s SKEW, --skew SKEW     ref. skew
  -m MODEL, --model MODEL  ref. model
0 голосов
/ 28 марта 2011

У меня нет python 3, но, глядя на OptionParser (что очень похоже), я замечаю, что вы можете изменить:

parser.formatter.max_help_position = 50

Это увеличит пространство, зарезервированное для флагов опции (по умолчанию это 24)

...