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文字です。この制限はシステムに依存しますか?上限を増やす方法はありますか?
デフォルトのヘルプフォーマッタは、端末に合わせて行を再ラップします(COLUMNS
環境変数を調べて出力幅を決定します。デフォルトは合計で80文字です)。
デフォルトでは、
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
別の簡単な方法は、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 ...