argparseはPythonプログラムを実行する際の引数を解析し、それらの引数をPythonプログラム内部で利用できるようにするためのライブラリです。 コマンドラインから引数を受け付けるように実装することで、汎用性が高いプログラムを提供できるようになります。 本記事ではargparseの使い方の中でもよく使う基本的な利用方法をサンプルコード付きでまとめました。

目次

パーサを作成して引数を解析する

import argparse
parser = argparse.ArgumentParser('Example program')

# この部分に後ほど引数を定義していきます

args = parser.parse_args()

parser.parse_args()で得られた値に引数を解析した結果が格納されます。 このプログラムをap.pyとして以降説明します。

このプログラムを-hという引数を与えて実行すると以下のようにこのプログラムの利用方法を出力できます。

python ap.py -h
usage: Example program [-h]

optional arguments:
  -h, --help  show this help message and exit

位置引数とoptional引数

argpaseでは位置引数とoptional引数を扱えます。

parser.add_argument('x')  # 位置引数
parser.add_argument('-i')  # optional引数

parse_args()が実行される際に接頭辞に-をつけて定義した引数はoptional引数、それ以外は位置引数として扱われます。 この2つの引数を定義してプログラムを実行してみます。

位置引数を定義した場合、それを与えずに実行するとエラーとなります。

python ap.py
usage: Example program [-h] [-i I] x
ap.py: error: the following arguments are required: x

プログラムの末尾にprint(args)を追記して実行してみます。 位置引数とoptional引数は順番に影響しません。

python a.py -i aaa i
Namespace(i='aaa', x='i')
python a.py aaa -i ooo
Namespace(i='ooo', x='aaa')

位置引数を複数定義している場合は、定義した順にプログラムに与える必要があるのでご注意ください。

指定必須の引数を定義する

次に指定必須なoptional引数を定義してみます。

parser.add_argument('-i', '--input', help='input', type=int, required=True)

ここでは-iもしくは--inputで与えられる引数を定義します。 この引数の型はintで、かつ省略できないもの (required=True) としています。 typeを指定しない場合、引数はstr型として扱われます。 また、argsを取得した行以降で、結果を出力するprint文を実行します。

print(args.input)

引数を省略して実行すると下記のエラーが出ます。

python ap.py
usage: Example program [-h] -i INPUT
Example program: error: the following arguments are required: -i/--input

引数に文字を与えるとintに変換できないのでエラーが出ます。

python ap.py --input a
usage: Example program [-h] -i INPUT
Example program: error: argument -i/--input: invalid int value: 'a'

引数に数値を与えると結果が出力され正常終了します。python ap.py -i 5としても同じ結果が得られます。

python ap.py --input 5
5

省略可能な引数を定義する

今度は省略可能な引数を定義してみます。引数を省略可能とする場合、defaultを定義しておくと使いやすいです。例えば以下のようにdefault=3と定義しておきます。

parser.add_argument('-i', '--input', help='input', type=int, default=3)

引数を与えずに実行すると、デフォルト値が代入され、出力されます。

python ap.py
3

defaultを定義しない場合、Noneが代入されます。

リストを引数として扱う

ある引数についてリスト形式で値を与えたい場合、nargsを用います。

nargs

import argparse


parser = argparse.ArgumentParser('Example program')
parser.add_argument('--fruits', nargs='+', help='list of fruits', required=True)
args = parser.parse_args()

print(args.fruits)
python ap.py --fruits apple banana orange
['apple', 'banana', 'orange']

nargs+以外にも指定することができます1

append

また以下のようにすることでも複数の値をリストとして与えることができます。

#parser.add_argument('--fruits', nargs='+', help='list of fruits', required=True)
parser.add_argument('--fruits', action='append')
args = parser.parse_args()
print(args.fruits)
python ap.py --fruits apple --fruits banana --fruits orange
['apple', 'banana', 'orange']

選択肢の中から選ぶ引数を扱う

引数として与える値の候補が事前にわかっている場合は、choicesを定義することで、未知の値に対してエラーを出すことができます。

parser.add_argument('--fruits', choices=['apple', 'banana', 'orange'], required=True)
args = parser.parse_args()
print(args.fruits)

選択肢にあるものを指定した場合:

python ap.py --fruits apple
apple

選択肢にないものを指定した場合:

python ap.py --fruits pine
usage: Example program [-h] --fruits {apple,banana,orange}
Example program: error: argument --fruits: invalid choice: 'pine' (choose from 'apple', 'banana', 'orange')

フラグを指定する引数を扱う

プログラムに与える引数で真偽値を扱いたい場合、actionを使います。

parser.add_argument('--with-something', action='store_true')
args = parser.parse_args()
print(args.with_something)

action=store_true``とすると、その引数を与えるとTrue`を格納することになります。

python ap.py --with-something
True

その引数を与えなければFalseが格納されます。

python ap.py
False

またaction='store_falseとすればFalseが格納されます。

おわり

本記事ではPythonのargparseの基本的な利用方法をサンプルコード付きでまとめました。


  1. https://docs.python.org/ja/3/library/argparse.html#nargs ↩︎


関連記事






最近の記事