2010-12-07 11 views
4

私はargparseを使用していると私は私のオプションのいずれかのヘルプテキストで一覧を表示します。しかし、argparseはテキストから新しい行を取り除き、それを1行に表示します。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のリンクを読んでください。私のコメントはあまりにも欺瞞です。ありがとう – petraus

+2

はい、この質問は既に回答されていますが、私は投稿後に彼のコメントを読んで、私はそれを残すことを考えた:) – user225312

3

あなただけの1のオプションを無効にしたい場合は、RawTextHelpFormatterを使用することはできません。 .add_argument()どこへその他の呼び出しを

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() 

:代わりに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) 

し、それを使用します助けが始まらないR|は通常どおりにラップされます。

これはmy improvements on argparseの一部です。完全なSmartFormatterでは、すべてのオプションにデフォルトの を追加し、ユーティリティの説明をそのまま入力することもできます。

関連する問題