web-dev-qa-db-ja.com

Python Argparse-デフォルトのヘルプメッセージにテキストを追加するにはどうすればよいですか?

引数の解析を処理するためにpythonのargparseを使用しています。次のような構造のデフォルトのヘルプメッセージが表示されます。

usage: ProgramName [-h] ...

Description

positional arguments:
  ...

optional arguments:
  -h, --help            show this help message and exit
  ...

私が欲しいのは、このメッセージに新しいセクション全体を追加することです。たとえば、

usage: ProgramName [-h] ...

Description

positional arguments:
  ...

optional arguments:
  -h, --help            show this help message and exit
  ...

additional information:
  This will show additional information relevant to the user.
  ....

この動作を実現する方法はありますか? python 2.7と3.xの両方でサポートされているソリューションが推奨されます。

編集:ヘルプメッセージの下部に新しいセクションを追加する解決策も用意します。

11
Yoavhayun

epilog を使用して、それを完全に行うことができます。以下に例を示します。

import argparse
import textwrap
parser = argparse.ArgumentParser(
      prog='ProgramName',
      formatter_class=argparse.RawDescriptionHelpFormatter,
      epilog=textwrap.dedent('''\
         additional information:
             I have indented it
             exactly the way
             I want it
         '''))
parser.add_argument('--foo', nargs='?', help='foo help')
parser.add_argument('bar', nargs='+', help='bar help')
parser.print_help()

結果:

usage: ProgramName [-h] [--foo [FOO]] bar [bar ...]

positional arguments:
  bar          bar help

optional arguments:
  -h, --help   show this help message and exit
  --foo [FOO]  foo help

additional information:
    I have indented it
    exactly the way
    I want it
15
dbaxime

コマンドに 説明を追加 する方法はいくつかあります。推奨される方法は、次のようにソースコードファイルの先頭にモジュールドキュメントを追加することです。

""" This is the description, it will be accessible within the variable
    __doc__
"""

その後:

parser = argparse.ArgumentParser(description=__doc__)

パラメータの説明の下にテキストを追加するには、次のドキュメントの例に示すように、epilogを使用します。

>>> parser = argparse.ArgumentParser(description='A foo that bars',  
                                     epilog="And that's how you'd foo a bar")
>>> parser.print_help() 

usage: argparse.py [-h]

A foo that bars

optional arguments:  -h, --help  show this help message and exit

And that's how you'd foo a bar

詳細については、上記のリンクのドキュメントを参照してください。

7
dangom