2010-12-07 9 views
4

argparse를 사용하고 있으며 내 옵션 중 하나의 도움말 텍스트에 목록을 표시하려고합니다. 그러나 argparse는 텍스트에서 새 줄을 제거하고 한 줄에 표시합니다.Python argparse : 미리 서식이 지정된 도움말 텍스트?

어쨌든 argparse에게 도움말 문자열이 미리 포맷되어 있고 줄 바꿈 문자를 제거하지 않는다고 말합니까? docs에서

+0

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

답변

5

:

RawTextHelpFormatter 인수의 설명을 포함하여 도움말 텍스트 의 모든 종류에 대한 공백을 유지합니다. 당신은 단지 하나의 옵션을 무시하려면

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

하나의 옵션에 대해이 작업을 수행 할 수있는 방법이 있습니까? 그것은 다른 사람을위한 포장 배치를 망쳐 놓는다 – petraus

+0

@ barti_ddu의 링크를 읽는다. 내 의견도 속임수입니다. thanks – petraus

+2

예,이 질문은 이미 답변되었지만 게시 후 그의 의견을 읽었 기 때문에 나는 그것을 머물게 할 것입니다. :) – user225312

3

, 당신은 RawTextHelpFormatter을 사용할 수 없습니다. 그것을

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) 

를 사용 : 대신 HelpFormatter를 서브 클래스 화해, "원시"처리해야 할 옵션에 대한 특별한 소개를 제공한다 (나는 "R|rest of help" 사용)

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는 또한 모든 옵션에 기본값 을 추가하고 유틸리티 설명의 원시 입력을 지원합니다.