Python Argparse: предварительная обработка текста справки?

StackOverflow https://stackoverflow.com/questions/4375327

  •  09-10-2019
  •  | 
  •  

Вопрос

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

Есть ли в любом случае, чтобы сообщить Argparse, что строка справки предварительно отформатирована, а не накладывать новые символы линии?

Это было полезно?

Решение

От документы:

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

from argparse import RawTextHelpFormatter
parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter)

Другие советы

Если вы просто хотите переопределить один вариант, вы не можете использовать 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 также поддерживает добавление по умолчанию для всех параметров и RAW входов описания утилит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top