[python]コマンドライン引数を取得する方法(argparse – 基本編)

python
スポンサーリンク

[python]コマンドライン引数を取得する方法(argparse – 基本編)

はじめに

Pythonスクリプトにコマンドライン引数を使用する方法です。
手軽に使用するには、標準ライブラリに含まれる sys モジュールの argv を使用しますが、今回はより本格的で標準ライブラリに含まれる argparse を使用します。

argparse は、[-h] や [--help] でのヘルプ表示が標準搭載されており、様々なヘルプ表記指定や引数の指定が可能です。
今回は基本的な機能をサンプルスクリプトとして取り上げます。
より詳細な機能紹介はこちらをご参照ください。

開発環境

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

使用方法

基本構成

argparse を使用する場合、主に以下の3つの構成にわかれています。

  1. ArgumentParser オブジェクト
    ⇒ ArgumentParser オブジェクトの生成。主にヘルプに関する設定をここでする。
  2. add_argument() メソッド
    ⇒ 引数を設定するメソッド。主に引数に関する設定をここでする。
  3. parse_args() メソッド
    ⇒ 解析する文字列を取得するメソッド。
基本サンプルスクリプト

argparse は様々な指定ができますが、まず基本のサンプルスプリクトで試してみます。

# ---------------------------------------------------------------------------
# [python]コマンドライン引数を取得する方法(argparse)
# https://www.farmsoft.jp/2681/
# ---------------------------------------------------------------------------
import argparse

# 1. ArgumentParser オブジェクト
parser = argparse.ArgumentParser()

# 2. add_argument() メソッド
parser.add_argument('arg')              # 位置(必須)引数
parser.add_argument('-o', '--option')   # オプション引数

# 3. parse_args() メソッド
args = parser.parse_args()

print(f'arg    = {args.arg}')
print(f'option = {args.option}')

この場合、位置(必須)引数1つとオプション引数1つの合計2つの引数を用意しています。
位置引数とは、必ず指定しなければいけない必須引数です。使用する時に [-] の指定は必要ありませんが、複数ある場合は引数の位置で特定されます。
オプション引数とは、デフォルトでは指定しなくて良いが、指定すると動作が変わるような時に使用します。 [-] や [–] を使用して指定します。

・引数を増やす場合は、parser.add_argument('引数名') を追加していく。
・接頭辞[-] を使用することでオプション引数となる。接頭辞[-] が1つの場合は短縮名扱い。2つの場合は正式な引数名称となり、スクリプト内では正式名称でアクセスする。複数の名称を指定可能。

位置(必須)引数があるため、引数を指定しなければ、以下のようにエラーとなります。

> python .\argparse_sample.py
usage: argparse_sample.py [-h] [-o OPTION] arg
argparse_sample.py: error: the following arguments are required: arg

必須引数のみ指定した場合は、オプション引数には「None」が入ります。

> python .\argparse_sample.py test
arg    = test
option = None

必須引数とオプション引数を指定すると、どちらにも値が入ります。

> python .\argparse_sample.py test -o 123
arg    = test
option = 123
> python .\argparse_sample.py test --option=123
arg    = test
option = 123

「-h」でヘルプ表示させると、以下のように表示されます。

> python .\argparse_sample.py -h
usage: argparse_sample.py [-h] [-o OPTION] arg

positional arguments:
  arg

options:
  -h, --help           show this help message and exit
  -o, --option OPTION

実用サンプルスクリプト例

基本サンプルスクリプトに、実用的なオプションをつけてみます。
例として、「フォルダ容量を指定し、その容量を超える分のファイルを古いものから削除するプログラム」のコマンドとします。

# ---------------------------------------------------------------------------
# [python]コマンドライン引数を取得する方法(argparse)
# https://www.farmsoft.jp/2681/
# ---------------------------------------------------------------------------
import argparse
import textwrap

parser = argparse.ArgumentParser(prog='argparse_practical.py',
                                formatter_class=argparse.RawTextHelpFormatter, 
                                description='フォルダ容量を指定し、その容量を超える分のファイルを古いものから削除するプログラム。')
parser.add_argument('size', type=float,                                             # 位置引数
                    help='フォルダ容量を指定[GByte]')
parser.add_argument('-t', '--type', default='*', nargs='*',                         # オプション引数
                    help=textwrap.dedent('''\
                        削除対象とするファイル拡張子を指定
                        ex) [-t mp4 png] ⇒ *.mp4 *.png のみ削除対象とする 
                        '''))
parser.add_argument('-s', '--silent', action='store_true',                          # オプション引数
                    help='サイレントモード(削除する時の確認が不要な場合に使用)')
parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0')    # オプション引数
args = parser.parse_args()

print(f'size={args.size}, type={args.type}, silent={args.silent}')
ヘルプ表示
> python .\argparse_practical.py -h
usage: argparse_practical.py [-h] [-t [TYPE ...]] [-s] [-v] size

フォルダ容量を指定し、その容量を超える分のファイルを古いものから削除するプログラム。

positional arguments:
  size                  フォルダ容量を指定[GByte]

options:
  -h, --help            show this help message and exit
  -t, --type [TYPE ...]
                        削除対象とするファイル拡張子を指定
                        ex) [-t mp4 png] ⇒ *.mp4 *.png のみ削除対象とする
  -s, --silent          サイレントモード(削除する時の確認が不要な場合に使用)
  -v, --version         show program's version number and exit

引数は位置引数1つとオプション引数3つの合計4つを設定しています。

prog を指定して、どのようにスクリプトが起動されてもプログラム名を固定して表示しています。
また、[--type] の説明が複数行にわたるため、formatter_class=argparse.RawTextHelpFormatter を指定して改行位置を反映させるようにしています。
説明欄を追加するため、description で説明を追記しています。

通常使用
> python .\argparse_practical.py 50
size=50.0, type=*, silent=False

位置引数 [size] はデータ型に floattype で指定しているため、float型で格納されています。
オプション引数 [type] は、指定がなかったため default * となります。
オプション引数 [silent] も、指定がなかったため action='store_true' でしてした動きとなり False となります。

オプション使用
> python .\argparse_practical.py 50 -t mp4 png
size=50.0, type=['mp4', 'png'], silent=False

オプション引数 [type] は、nargs で指定しているため複数の引数を受け付けることができます。

> python .\argparse_practical.py 50 -t mp4 png -s
size=50.0, type=['mp4', 'png'], silent=True

オプション引数 [silent] は、指定されると action='store_true' でしてした動きとなり True となります。

おわりに

argparse は、機能が多いため全て理解するのは大変ですが、かなり詳細に決めることができます。

コメント

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