2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのargparseを触ってみた

2
Last updated at Posted at 2026-10-17

Pythonのargparseを使う機会があったので、触ってみました。

実行環境

Anacondaで作成したPython 3.13.16で検証しています。

シナリオ1

main関数の処理はprint("main関数の処理")の実行有無で判断しました。
ヘルプの文章は好きなようにカスタムできるようにしています。
-h / --help自体のヘルプ文章もカスタムしているため、意図的にadd_help=Falseを設定しています。

コマンド 出力 main関数の処理
python sample1.py -h ヘルプ → 終了 表示されない
python sample1.py ヘルプ → 終了 表示されない
python sample1.py -G G オプションが指定されました 表示される
python sample1.py -x(未定義の引数) usage とエラー → 終了(コード2) 表示されない
sample1.py
import argparse

def main():
    parser = argparse.ArgumentParser(
        prog="sample1",
        description="argparse のサンプルプログラム",
        epilog="例: python sample1.py -h",
        add_help=False,  # 標準の -h を無効にする
    )
    # -h を自分で定義し、help の文言を自由に変えられるようにする
    # action="help"は、ヘルプの文章を表示するためのアクションです。"
    parser.add_argument(
        "-h", "--help",
        action="help",
        help="ヘルプの文章は好きに変えられます",
    )

    # store_true は、オプションが指定された場合に True を返すアクションです。
    parser.add_argument(
        "-G",
        action="store_true",
        help="G オプションが指定された場合に True になります",
    )
    parser.parse_args()

    if parser.parse_args().G:
        print("G オプションが指定されました")
    else:
        parser.print_help()
        exit()  # ここでプログラムを終了し、後続の main の処理は実行しない

    print("main関数の処理")


if __name__ == "__main__":
    main()

実行してみると想定通りになっています。

> python sample1.py --help
usage: sample1 [-h] [-G]

argparse のサンプルプログラム

options:
  -h, --help  ヘルプの文章は好きに変えられます
  -G          G オプションが指定された場合に True になります

例: python sample1.py -h
>python sample1.py       
usage: sample1 [-h] [-G]

argparse のサンプルプログラム

options:
  -h, --help  ヘルプの文章は好きに変えられます
  -G          G オプションが指定された場合に True になります

例: python sample1.py -h
>python sample1.py -G
G オプションが指定されました
main関数の処理
>python sample1.py -x   
usage: sample1 [-h] [-G]
sample1: error: unrecognized arguments: -x

シナリオ2

シナリオ1だと特に面白くはないです。
何となくオーバーライドって言ってみたいので、ヘルプ表示の後に任意の処理を実行できるようにしてみます。
早速、print_helpをオーバーライドしてみました。

コマンド 出力 main関数の処理
python sample2.py -h ヘルプ → ヘルプ表示後の処理も実行できます → 終了 表示されない
python sample2.py ヘルプ → ヘルプ表示後の処理も実行できます → 終了 表示されない
python sample2.py -G G オプションが指定されました 表示される
python sample2.py -x(未定義の引数) usage とエラー → 終了(コード2) 表示されない
sample2.py
import argparse

class MyArgumentParser(argparse.ArgumentParser):
    """print_help をカスタムした ArgumentParser"""

    # print_help をオーバーライドして、ヘルプ表示後に 任意の処理 を実行するようにする
    def print_help(self, file=None):
        super().print_help(file)  # 元のヘルプ表示
        print("ヘルプ表示後の処理も実行できます")  # ヘルプ表示後の処理
        self.exit()  # ここでプログラムを終了し、後続の main の処理は実行しない


def main():
    parser = MyArgumentParser(
        prog="sample2",
        description="argparse のサンプルプログラム",
        epilog="例: python sample2.py -h",
        add_help=False,  # 標準の -h を無効にする
    )
    # -h を自分で定義し、help の文言を自由に変えられるようにする
    # action="help"は、ヘルプの文章を表示するためのアクションです。"
    parser.add_argument(
        "-h", "--help",
        action="help",
        help="ヘルプの文章は好きに変えられます",
    )

    # store_true は、オプションが指定された場合に True を返すアクションです。
    parser.add_argument(
        "-G",
        action="store_true",
        help="G オプションが指定された場合に True になります",
    )
    parser.parse_args()

    if parser.parse_args().G:
        print("G オプションが指定されました")
    else:
        parser.print_help()
        # sample1.pyでは後続処理を実行させないためにexitを記載していましたが、print_helpのカスタムに加えたので削除しています。

    print("main関数の処理")


if __name__ == "__main__":
    main()

実行してみると想定通りです。

>python sample2.py --help
usage: sample2 [-h] [-G]

argparse のサンプルプログラム

options:
  -h, --help  ヘルプの文章は好きに変えられます
  -G          G オプションが指定された場合に True になります

例: python sample2.py -h
ヘルプ表示後の処理も実行できます
>python sample2.py       
usage: sample2 [-h] [-G]

argparse のサンプルプログラム

options:
  -h, --help  ヘルプの文章は好きに変えられます
  -G          G オプションが指定された場合に True になります

例: python sample2.py -h
ヘルプ表示後の処理も実行できます
>python sample2.py -G
G オプションが指定されました
main関数の処理
>python sample2.py -x
usage: sample2 [-h] [-G]
sample2: error: unrecognized arguments: -x
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?