Pythonのコマンドライン引数(argparse編)

Pythonスクリプトのコマンドライン引数の処理を簡単にしてくれるargparseモジュールの使い方です。

目次

  1. コマンドライン引数をスクリプト内で解釈するには
  2. argparseモジュールの使い方

コマンドライン引数をスクリプト内で解釈するには

スクリプトのコマンドラインの引数を単純に参照したいだけでしたら、 sysモジュールのargvプロパティを参照するという方法 があります。引数そのものが取得できます。単純なスイッチを設定したいだけでしたら、こちらの方が手軽です。

ただしちょっと複雑なことをしようとするのであれば、argparseモジュールを使う方が楽になります。

argparseモジュールの使い方

argparseモジュールは、主に次のステップで使います。

  1. パーサーオブジェクトを作る。
  2. パーサーオブジェクトに引数を登録する。
  3. 引数をパーサーで解析する。
  4. 解析したオブジェクトのプロパティを参照する。

次のコードは簡単な例です。

import argparse

# パーサーオブジェクトを作る。
parser = argparse.ArgumentParser()

# パーサーオブジェクトに引数を登録する。
parser.add_argument('--hoge')
parser.add_argument('--piyo')
parser.add_argument('fuwa')
parser.add_argument('saku')

# 引数をパーサーで解析する。
args = parser.parse_args()

# 解析したオブジェクトのプロパティを参照する。
print('引数 hoge : ', args.hoge)
print('引数 piyo : ', args.piyo)
print('引数 fuwa : ', args.fuwa)
print('引数 saku : ', args.saku)

このプログラムでは、hoge、piyo、fuwa、sakuというコマンドライン引数を設定して、それぞれの引数に指定された値をprintで出力します。

設定した引数のうち、fuwaとsakuを位置引数、hogeとpiyoをオプショナル引数と呼びます。位置引数はプログラム実行時に必ず指定しなければならない引数で、オプショナル引数は省略可能な引数です。位置引数は引数の順番が決まっており、プログラム実行時に引き数名の指定は不要です。

では試してみましょう。

上記のコードをartgry.pyという名前のファイルに保存して実行します。

>python argtry.py ぬる ぽ --hoge foo --piyo bar
引数 hoge :  foo
引数 piyo :  bar
引数 fuwa :  ぬる
引数 saku :  ぽ

>python argtry.py --piyo bar ぽ --hoge foo ぬる
引数 hoge :  foo
引数 piyo :  bar
引数 fuwa :  ぽ
引数 saku :  ぬる

オプショナル引数は順番を変えても大丈夫です。位置引数の方は順番を入れ替えると値の格納先が変わってしまいます。でも、簡単に値が取り出せて楽ですね。

何も指定しない場合はどうなるでしょうか。

>python argtry.py
usage: argtry.py [-h] [--hoge HOGE] [--piyo PIYO] fuwa saku
argtry.py: error: the following arguments are required: fuwa, saku

>python argtry.py ぬる ぽ
引数 hoge :  None
引数 piyo :  None
引数 fuwa :  ぬる
引数 saku :  ぽ

位置引数分の指定をしないと、エラーになりました。エラーメッセージにfuwaとsakuを指定しろと書かれてますね。

位置引数を指定してオプショナル引数を指定しないと、オプショナル引数の分はNoneが出力されました。変数の型としてはstrではなくてNoneTypeです。

argparseモジュールを使うと、既定でヘルプを付けてくれます。

>python argtry.py -h
usage: argtry.py [-h] [--hoge HOGE] [--piyo PIYO] fuwa saku

positional arguments:
  fuwa
  saku

optional arguments:
  -h, --help   show this help message and exit
  --hoge HOGE
  --piyo PIYO

どういう引数が必要なのか表示してくれます。ヘルプを自分で書かなくて良いわけですね。これは便利です。

広告

Pythonのコマンドライン引数カテゴリの投稿