2010-12-07 2 views
4

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

Есть ли все-таки сказать argparse, что строка справки предварительно отформатирована и не разбить новые символы строки?

+0

dup: http://stackoverflow.com/questions/3853722/python-argparse-how-to-insert-newline-the-help-text? – 2010-12-07 10:06:06

ответ

5

Из docs:

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

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

есть ли способ сделать это для одного варианта? он испортил перенос слов для остальных – petraus 2010-12-07 10:16:34

3

Если вы просто хотите, чтобы переопределить один вариант, вы не можете использовать RawTextHelpFormatter. Вместо этого подкласса HelpFormatter и обеспечивают специальную интро для опций, которые должны быть обработаны «сырой» (я использую "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| будет завернута как обычно.

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