search
LoginSignup
0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

argparseでコマンドライン引数を設定

はじめに

chainerのサンプルプログラムを少し触ろうとしたところ, エポック数やバッチサイズなど様々な値をコマンドライン引数で指定できるような仕組みをになっており, それらがargparseというライブラリで構成されているようなので調べてみました.

パーサー作成

argparseを使用するためには, はじめにArgumentParserオブジェクトを作成する必要があります. ArgumentParserオブジェクトはコマンドラインに関するデータを保持します.

parser = argparse.ArgumentParser()

引数の追加

add_argument()メソッドを呼び出し, ArgumentParserオブジェクトにコマンドラインの文字列をオブジェクトに変換するための情報を与えます.
add_argument()メソッドの引数には以下があります.

引数 説明
name or flag 引数かオプション引数か指定
help 引数の説明
required オプション引数の省略をするかどうか
type 引数の型
default 指定がない場合に設定される値

name or flag

位置引数かオプション引数かを指定します. 位置引数は関数に対して必須となる引数で, オプション引数はあってもなくても良い引数です. add_argumentメソッドの第1引数で指定します. オプション引数には「-」をつける必要があります. 「-」で省略した名称, 「--」で正式な名称を指定します.

test.py
# coding: utf-8
import argparse

# パーサー作成
parser = argparse.ArgumentParser()
#引数の設定
parser.add_argument('-n', '--number')
# 引数を解析
args = parser.parse_args()
$python test.py -h
usage: test.py [-h] [-n NUMBER]

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

optional arguments に新たな引数が追加されています.

help

引数の説明を記述します. 実際に, さきほど追加した引数の説明を追加してみます.

test.py
# coding: utf-8
import argparse

# パーサー作成
parser = argparse.ArgumentParser()
#引数の設定
parser.add_argument('-n', '--number', help = 'This is description')
# 引数を解析
args = parser.parse_args()
$ python test.py -h
usage: test.py [-h] [-n NUMBER]

optional arguments:
  -h, --help            show this help message and exit
  -n NUMBER, --number NUMBER
                        This is description

「This is description」と説明が追加されているのが分かります.

required

オプション引数の省略するかどうかを指定します.

test.py
# coding: utf-8
import argparse

# パーサー作成
parser = argparse.ArgumentParser()
#引数の設定
parser.add_argument('-n', '--number', required = True)
# 引数を解析
args = parser.parse_args()

print(args.number)
$ python test.py
usage: test.py [-h] -n NUMBER
test.py: error: the following arguments are required: -n/--number

required をTrueに設定し, 引数を指定しなければエラーになります.

$ python test.py -n 10
10

引数を設定すると, 無事実行されます.

type

test.py
# coding: utf-8
import argparse

# パーサー作成
parser = argparse.ArgumentParser()
#引数の設定
parser.add_argument('-n', '--number')
# 引数を解析
args = parser.parse_args()

print(type(args.number))
$ python test.py -n 10
<class 'str'>

引数の型はデフォルトでは文字列となっています. 異なる型で扱いたい場合は, typeで型を指定します.

test.py
# coding: utf-8
import argparse

# パーサー作成
parser = argparse.ArgumentParser()
#引数の設定
parser.add_argument('-n', '--number', type = int)
# 引数を解析
args = parser.parse_args()

print(type(args.number))
$ python test.py -n 10
<class 'int'>

指定した型になっていることが確認できます.

default

コマンドラインにて指定がなかった場合には, defaultで設定された値を用いて使用します.

test.py
# coding: utf-8
import argparse

# パーサー作成
parser = argparse.ArgumentParser()
#引数の設定
parser.add_argument('-n', '--number', default = 5)
# 引数を解析
args = parser.parse_args()

print(args.number)
$ python test.py 
5

コマンドライン引数を指定しなければ, defaultの値が使用されているのが確認できます.

引数の解析

parse_args()メソッドで引数の解析をします. コマンドラインからの各引数を適切な型に変換して処理を実行します.

args = parser.parse_args()

参考サイト

その1
その2

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
What you can do with signing up
0
Help us understand the problem. What are the problem?