Python Argparse: предварительная обработка текста справки?
Вопрос
Я использую 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 входов описания утилит.