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のヘルプメッセージを改善する方法の一部です。詳細な情報や他の改善方法については、公式ドキュメントや他のリソースを参照してください。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です