[python]コマンドライン引数を取得する方法(argparse – ヘルプ表示編)

python
スポンサーリンク

[python]コマンドライン引数を取得する方法(argparse – ヘルプ表示編)

はじめに

Pythonスクリプトにコマンドライン引数を使用する方法です。
より本格的な標準ライブラリに含まれる argparse を使用します。

argparse は様々なオプションがありますが、その中でもヘルプ表示についての機能を紹介します。
基本的な紹介や、引数設定の機能紹介についてはこちらをご参照ください。

ンがありますが、その中でもヘルプ表示についてのオプションを紹介します。

開発環境

OS : Windows 11 Pro
Python:3.13.2
使用ライブラリ:なし

説明

ヘルプ表示の基本的なオプションを取り上げてみます。
全てを取り上げると量が膨大になるため、詳細は公式ドキュメントを参照ください。

help 表示カスタマイズ

ArgumentParser オブジェクトに指定することで、help 表示をカスタマイズできます。
最後の引数説明表示(help)のみ、add_argument() メソッドに指定します。

プログラム名[prog]変更

prog にプログラム名を指定することで、usage に表示されるプログラム名[prog]が変更されます。
デフォルトでは、sys.argv[0] が格納されています。
また、ヘルプメッセージ中では %(prog)s フォーマット指定子で利用できます。

import argparse
parser = argparse.ArgumentParser(prog='プログラム名')
args = parser.parse_args()
> python .\argparse_prog.py -h
usage: プログラム名 [-h]

options:
  -h, --help  show this help message and exit
使用法表示[usage]変更

usage に表示内容を指定することで 使用法表示[usage]を変更できます。
デフォルトでは、「プログラム名+引数」が表示されます。

import argparse
parser = argparse.ArgumentParser(prog='プログラム名', usage='%(prog)s [options]')
args = parser.parse_args()
> python .\argparse_usage.py -h
usage: プログラム名 [options]

options:
  -h, --help  show this help message and exit
説明[description]表示

description に表示内容を指定することで、usage options の間に説明[description]を表示できます。
デフォルトでは表示されません。

import argparse
parser = argparse.ArgumentParser(description='プログラム説明')
args = parser.parse_args()
> python .\argparse_description.py -h
usage: argparse_description.py [-h]

プログラム説明

options:
  -h, --help  show this help message and exit
エピローグ[epilog]表示

epilog に表示内容を指定することで、エピローグ[epilog]を表示できます。
デフォルトでは表示されません。

import argparse
parser = argparse.ArgumentParser(epilog="エピローグ")
args = parser.parse_args()
> python .\argparse_epilog.py -h
usage: argparse_epilog.py [-h]

options:
  -h, --help  show this help message and exit

エピローグ
フォーマット[formatter_class]変更

フォーマットクラスを指定することで、ヘルプのフォーマットをカスタマイズすることができます。

フォーマットクラス対象カスタマイズ内容
class argparse.RawDescriptionHelpFormatterdescriptionepilog改行位置を反映させる
class argparse.RawTextHelpFormatterhelp(引数の説明)改行位置を反映させる
class argparse.ArgumentDefaultsHelpFormatterhelp(引数の説明)デフォルト値を自動追加
class argparse.MetavarTypeHelpFormatter引数の表示名dest ではなく type を表示
RawDescriptionHelpFormatter

説明[description]エピローグ[epilog]の改行位置を反映させることができます。
また、コード内でインデントの文字列を綺麗にするため、textwrap.dedent を使用しています。

import argparse
import textwrap
parser = argparse.ArgumentParser(
    prog='PROG',
    formatter_class=argparse.RawDescriptionHelpFormatter,
    description=textwrap.dedent('''\
            Please do not mess up this text!
            --------------------------------
                I have indented it
                exactly the way
                I want it
            '''))
args = parser.parse_args()
> python .\argparse_RawDescriptionHelpFormatter.py -h
usage: PROG [-h]

Please do not mess up this text!
--------------------------------
    I have indented it
    exactly the way
    I want it

options:
  -h, --help  show this help message and exit

以下は、「RawDescriptionHelpFormatter」を指定していない場合の表示内容です。
1行で表示されています。

> python .\argparse_RawDescriptionHelpFormatter.py -h
usage: PROG [-h]

Please do not mess up this text! -------------------------------- I have indented it exactly the way I want it

options:
  -h, --help  show this help message and exit
RawTextHelpFormatter

help (引数の説明)の改行位置を反映させることができます。
また、コード内でインデントの文字列を綺麗にするため、textwrap.dedent を使用しています。

import argparse
import textwrap
parser = argparse.ArgumentParser(
    prog='PROG',
    formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('bar',
                    help=textwrap.dedent('''\
                        Please do not mess up this text!
                        --------------------------------
                            I have indented it
                            exactly the way
                            I want it
                        '''))
args = parser.parse_args()
> python .\argparse_RawTextHelpFormatter.py -h
usage: PROG [-h] bar

positional arguments:
  bar         Please do not mess up this text!
              --------------------------------
                  I have indented it
                  exactly the way
                  I want it

options:
  -h, --help  show this help message and exit

以下は、「RawTextHelpFormatter」を指定していない場合の表示内容です。
1行で表示されています。

> python .\argparse_RawTextHelpFormatter.py -h
usage: PROG [-h] bar

positional arguments:
  bar         Please do not mess up this text! -------------------------------- I have indented it exactly the way I want it

options:
  -h, --help  show this help message and exit
ArgumentDefaultsHelpFormatter

help(引数の説明)にデフォルト値を自動で表示させます。

import argparse
parser = argparse.ArgumentParser(
    prog='PROG',
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--foo', type=int, default=42, help='FOO!')
parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!')
args = parser.parse_args()
> python .\argparse_ArgumentDefaultsHelpFormatter.py -h
usage: PROG [-h] [--foo FOO] [bar ...]

positional arguments:
  bar         BAR! (default: [1, 2, 3])

options:
  -h, --help  show this help message and exit
  --foo FOO   FOO! (default: 42)
MetavarTypeHelpFormatter

各引数の表示名に type 引数の値を使用します (通常は dest の値が使用されます)

import argparse
parser = argparse.ArgumentParser(
    prog='PROG',
    formatter_class=argparse.MetavarTypeHelpFormatter)
parser.add_argument('--foo', type=int)
parser.add_argument('bar', type=float)
args = parser.parse_args()
> python .\argparse_MetavarTypeHelpFormatter.py -h
usage: PROG [-h] [--foo int] float

positional arguments:
  float

options:
  -h, --help  show this help message and exit
  --foo int
引数説明表示(help)

ヘルプ表示する時に、引数の説明を表示することができます。
プログラム名 %(prog)s と、 %(default)s や %(type)s などのフォーマット指定子を含めることができます。

import argparse
parser = argparse.ArgumentParser(prog='frobble')
parser.add_argument('bar', nargs='?', type=int, default=42,
                    help='the bar to %(prog)s (default: %(default)s)')
args = parser.parse_args()
print(f'move={args.move}')
> python .\argparse_help.py --help
usage: frobble [-h] [bar]

positional arguments:
  bar         the bar to frobble (default: 42)

options:
  -h, --help  show this help message and exit

おわりに

オプションを使用すると、本格的なヘルプ表示も可能になります。

コメント

タイトルとURLをコピーしました