Pythonのargparseモジュールは、コマンドラインインターフェースの作成を簡単にします。しかし、デフォルトの設定では、CLIのヘルプメッセージが分かりづらいことがあります。
例えば、以下のようなCLIのヘルプメッセージを考えてみましょう。
cli.py
from argparse import ArgumentParser
def parse_args():
parser = ArgumentParser( description=textwrap.dedent( \"\"\" イメージを作成する。 ``aws ec2 create-image`` コマンドを参考にした。 \"\"\" ).strip() )
parser.add_argument( \"--name\", type=str, required=True, help=textwrap.dedent( \"\"\" イメージの名前。 制約:3-128文字の英数字。 \"\"\" ).strip(), )
parser.add_argument( \"--type\", type=str, choices=[\"foo\", \"bar\"], default=\"bar\", help=textwrap.dedent( \"\"\" イメージのタイプ。 * foo: FOO * bar: BAR \"\"\" ).strip(), )
parser.add_argument( \"--dry-run\", action=\"store_true\", help=\"イメージを作らずに、イメージを作る権限があるかどうかをチェックする。 \" )
return parser.parse_args()
if __name__ == \"__main__\":
parse_args()
このCLIのヘルプメッセージは以下のように表示されます。
$ python cli.py -h
usage: cli.py [-h] --name NAME [--type {foo,bar}] [--dry-run]
イメージを作成する。 ``aws ec2 create-image`` コマンドを参考にした。
optional arguments:
-h, --help show this help message and exit
--name NAME イメージの名前。 制約:3-128文字の英数字。
--type {foo,bar} イメージのタイプ。 * foo: FOO * bar: BAR
--dry-run イメージを作らずに、イメージを作る権限があるかどうかをチェックする。
このヘルプメッセージは以下の点で分かりづらいです。
– コマンドの説明、引数の説明が改行されていない
– –type にデフォルト値が表示されていない
これらの問題を解決するために、argparseのヘルプのフォーマットクラスを利用して、ヘルプメッセージを改善する方法を紹介します。
フォーマッタークラスを指定する
argparseには4つのフォーマットクラスが用意されています。これらのフォーマットクラスを複数継承したクラスを、ArgumentParser コンストラクタの formatter_class 引数に指定します。
from argparse import ArgumentParser, RawTextHelpFormatter, RawDescriptionHelpFormatter, ArgumentDefaultsHelpFormatter
class MyHelpFormatter(RawTextHelpFormatter, RawDescriptionHelpFormatter, ArgumentDefaultsHelpFormatter):
pass
def parse_args():
parser = ArgumentParser(
description=\"\"\" イメージを作成する。 ``aws ec2 create-image`` コマンドを参考にした。 \"\"\",
formatter_class=MyHelpFormatter
)
これにより、引数の説明で空白と改行がそのまま表示され、かつデフォルト値も表示されるようになります。
以上が、Pythonのargparseモジュールを使って、CLIのヘルプメッセージを改善する方法の一部です。詳細な情報や他の改善方法については、公式ドキュメントや他のリソースを参照してください。