web-dev-qa-db-ja.com

python argparse help displayの複数行

Python2.7ではargparse を使用していますが、引数のヘルプテキストに複数の行を表示したいと思います。

私のコードは次のようになります:

import argparse

parser = argparse.ArgumentParser(description='details',
        usage='use "%(prog)s --help" for more information')

parser.add_argument('--argument', default=None, type=sometype,
        help='''
             First line  \n
             Second line \n
             \n
             More lines  \n
             ''')

--helpを呼び出すときに、ヘルプメッセージを複数行で出力したいと思います。ただし、出力は次のようになります。

First line Second line More lines

各行の文字列を合計することで問題を解決できることを知っています。

parser.add_argument('--argument', default=None, type=sometype,
        help='First line  \n' +
             'Second line \n' +
             '\n'             + 
             'More lines')

しかし、ヘルプテキストに追加したい数十行があります。ヘルプテキストを複数の行に分割する便利な方法はあるのでしょうか。

また、ヘルプメッセージの1行に表示できる文字数には上限があるようです。私の場合は54文字です。この制限はシステムに依存しますか?上限を増やす方法はありますか?

13
Wang Zong'an

デフォルトのヘルプフォーマッタは、端末に合わせて行を再ラップします(COLUMNS環境変数を調べて出力幅を決定します。デフォルトは合計で80文字です)。

formatter_classセクション から:

デフォルトでは、ArgumentParserオブジェクトはコマンドラインヘルプメッセージの説明とエピローグテキストを折り返します。

代わりにRawTextHelpFormatterクラスを使用して、すでに行をラップしていることを示します。

RawTextHelpFormatterは、引数の説明を含め、あらゆる種類のヘルプテキストの空白を維持します。

次のようなコードの場合:

parser = argparse.ArgumentParser(description='details',
        usage='use "%(prog)s --help" for more information',
        formatter_class=argparse.RawTextHelpFormatter)

多くの改行を追加しないように注意してください。三重引用符で囲まれた文字列には、文字列に残した改行が含まれます。そのため、\n文字は必要ありません。

>>> import argparse
>>> parser = argparse.ArgumentParser(description='details',
...         usage='use "%(prog)s --help" for more information',
...         formatter_class=argparse.RawTextHelpFormatter)
>>> parser.add_argument('--argument', default=None,
...         help='''
...              First line
...              Second line
... 
...              More lines
...              ''')
_StoreAction(option_strings=['--argument'], dest='argument', nargs=None, const=None, default=None, type=None, choices=None, help='\n             First line\n             Second line\n\n             More lines\n             ', metavar=None)
>>> parser.print_help()
usage: use " --help" for more information

details

optional arguments:
  -h, --help           show this help message and exit
  --argument ARGUMENT  
                                    First line
                                    Second line

                                    More lines
19
Martijn Pieters

別の簡単な方法は、textwrapを含めることです。

例えば、

import argparse, textwrap
parser = argparse.ArgumentParser(description='Prepare input file',
        usage='use "python %(prog)s --help" for more information',
        formatter_class=argparse.RawTextHelpFormatter)

parser.add_argument('--argument', default=somedefault, type=sometype,
        help= textwrap.dedent('''\
        First line
        Second line
        More lines ...
         '''))

このようにして、各出力行の前にある長い空のスペースを回避できます。

usage: use "python your_python_program.py --help" for more information

Prepare input file

optional arguments:
-h, --help            show this help message and exit
--argument ARGUMENT
                      First line
                      Second line
                      More lines ...
5
Wang Zong'an