Python argparse: предварительно отформатированный текст справки? - PullRequest
4 голосов
/ 07 декабря 2010

Я использую argparse и хочу отобразить список в тексте справки одного из моих вариантов. Однако argparse удаляет новые строки из текста и отображает их в одной строке.

Можно ли в любом случае сказать argparse, что строка справки предварительно отформатирована, а не удалять символы новой строки?

Ответы [ 2 ]

5 голосов
/ 07 декабря 2010

Из документов :

RawTextHelpFormatter поддерживает пробелы для всех видов текста справки включая описания аргументов.

from argparse import RawTextHelpFormatter
parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter)
3 голосов
/ 04 марта 2014

Если вы просто хотите переопределить одну опцию, вы не можете использовать RawTextHelpFormatter. Вместо этого создайте подкласс HelpFormatter и предоставьте специальное вступление для опций, которые должны обрабатываться "raw" (я использую "R|rest of help"):

import argparse

class SmartFormatter(argparse.HelpFormatter):

    def _split_lines(self, text, width):
        # this is the RawTextHelpFormatter._split_lines
        if text.startswith('R|'):
            return text[2:].splitlines()  
        return argparse.HelpFormatter._split_lines(self, text, width)

И используйте это:

from argparse import ArgumentParser
from textwrap import dedent

parser = ArgumentParser(description='test')

parser.add_argument('--list', help=dedent("""\
    R|abc
      def
        ghi
"""))
parser.parse_args()

Любые другие вызовы .add_argument(), где справка начинается не с R|, будут переноситься как обычно.

Это часть моих улучшений в argparse . Полный SmartFormatter также поддерживает добавление значения по умолчанию для всех опций и необработанный ввод описания утилит.

...