【Python】実行時の引数を設定(argparse)

argparseとは?

python実行時に引数を与えることがあります。
argparseを用いれば、簡単に引数の処理ができます。

例えば、以下のように--argとオプションを設けて
Pythonを実行することができます。

python sample.py --arg hoge

基本処理

オプションなし

import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args()
parser.add_argument('arg')

print(args.arg)

Python実行

コンソールからPythonを実行してみましょう。

python sample.py hoge

結果

hoge

オプションあり(1つだけ)

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--arg')
args = parser.parse_args()

print(args.arg)

今回は引数を与える時に、--arg-aといったように、 オプションを与えて実行してあげる。

-a--argの省略形になり、何度も記載する際には省略形を利用するほうが良いだろう。

print(args.arg)では省略形を用いず、
正式名称を用いる必要がある。

Python実行

コンソールからPythonを実行してみましょう。

#どちらも同じ結果になる
python arrg_practice.py --arg huga
python arrg_practice.py -a huga

結果

huga

オプションあり(複数あり)

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-a', '--arg')
parser.add_argument('-b', '--arg2')
args = parser.parse_args()

print(args.arg)
print(args.arg2)

Python実行

オプションを設定した場合は、場所を入れ替えても問題ない。

#いずれも同じ結果になる
python arrg_practice.py --arg huga --arg2 hoge
python arrg_practice.py -a huga -b hoge
python arrg_practice.py --arg2 hoge --arg huga
python arrg_practice.py -b hoge -a huga

結果

huga
hoge

応用処理

デフォルト値の設定

引数を与えなかった場合に、デフォルト値を設定することができる。

まずはPythonスクリプト

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--arg', default='not exist argument')
args = parser.parse_args()

print(args.arg)

defalult=の部分に引数を与えなかった場合のデフォルト値が格納される。

Python実行

引数を与えた場合と与えなかった場合で見比べてみましょう。

引数あり

python arrg_practice.py -a hoge

結果

hoge

引数なし

python arrg_practice.py

結果

not exist argument

このように引数を与えなかった場合、
defalutに格納されたnot exist argumentargに与えられました。

フラグとして使う

引数の有無で、フラグを設定することができます。
設定方法はadd_argumentのaction='store_true'とすることで可能になります。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-a', '--flag', action='store_true')
args = parser.parse_args()

if args.flag is True:
    print('flag True')
else:
    print('flag None')

Python実行

フラグありの場合
python arrg_practice.py --flag

結果

flag True

フラグなしの場合

python arrg_practice.py

結果

flag None

フラグの有無で、実行内容の条件分岐をさせたい場合には、
このようにフラグを設定することが可能になります。

指定した値のみ引数とする

予め引数で与える値が決まっており、 決まった候補からしか選択できないようにする。

選択肢以外を引数として与えた場合は、エラーになる。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('--select', choices=['hoge', 'huga', 'piyo'])
args = parser.parse_args()

print(args.select)

引数の選択肢にhoge, huga, piyoを指定しました。
これ以外の選択肢が与えられるとエラーになります。

Python実行

選択肢から与える
python arrg_practice.py --select huga

結果

huga

選択肢外から与える

python arrg_practice.py --select poyo

結果

usage: arrg_practice.py [-h] [--select {hoge,huga,piyo}]
arrg_practice.py: error: argument --select: invalid choice: 'poyo' (choose from 'hoge', 'huga', 'piyo')

エラー内容を見ると、指定された値以外(poyo)が付与されたため、
エラーになりましたと記載されております。

参考書籍

入門 Python 3

入門 Python 3