Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【python】argparserでコマンドライン引数を解析する

argparser

16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.5 ドキュメント

argparserpython標準モジュールの一つで、pythonスクリプト実行時に受け取ったコマンドライン引数を解析するのに役立ちます。

例えば、lsコマンドのように、引数無しで実行することもできれば、引数やオプションを与えることで挙動が変更するようなスクリプトを記述することができます。またargparserを用いることで、デフォルトでヘルプメッセージを実装することができます。

Usage

基本形

argparserを利用する基本形は以下になります。

import argparse
parser = argparse.ArgumentParser("起動時メッセージ")
args = parser.parse_args()

argparseモジュールをインポートし、argparse.ArgumentParserクラスのインスタンスを生成するだけです。これでコマンドライン引数を解析する準備が整いました。

以降、解析したコマンドライン引数はparse_args()メソッドで取得することができます。 また、parse_args()メソッドを呼び出した時点でスクリプトのヘルプコマンドが使えるようになります。

$ python hoge.py --help
usage: 起動時メッセージ [-h]

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

必須コマンドライン引数の追加

引数の追加

引数の追加は、argparse.ArgumentParserインスタンスadd_argument()メソッドを用いて行います。

import argparse
parser = argparse.ArgumentParser("起動時メッセージ")
parser.add_argument("arg1")
args = parser.parse_args()

add_argument()で追加した文字列は、コマンドライン引数のラベルとして扱われます。ラベルは追加された順に割り当てられます。

$ python hoge.py --help
usage: 起動時メッセージ [-h] arg1

positional arguments:
  arg1

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

# 引数がないとエラー = 必須な引数
$ python hoge.py       
usage: 起動時メッセージ [-h] arg1
起動時メッセージ: error: the following arguments are required: arg1

# arg1が第一引数のラベルとして自動的に割り当てられる
$ python hoge.py a
Namespace(arg1='a')
引数の参照

引数への参照は、通常のオブジェクトのようにプロパティアクセスで可能です。

  parser = argparse.ArgumentParser("起動時メッセージ")
  parser.add_argument("arg1")
  args = parser.parse_args()
  print(args.arg1)
$ python hoge.py  100
100
ヘルプメッセージ

add_argument()の引数helpにはヘルプ表示時のメッセージを設定することができます。

parser.add_argument("arg1", help="arg1のヘルプメッセージ")
 $ python hoge.py --help
usage: 起動時メッセージ [-h] arg1

positional arguments:
  arg1        arg1のヘルプメッセージ

optional arguments:
  -h, --help  show this help message and exit
引数の型指定

引数には値の型も指定することができます。引数である文字列値を、指定された型にキャストしてくれます。

parser.add_argument("arg1", help="arg1のヘルプメッセージ", type=int)
# NG
 $ python hoge.py hoge  
usage: 起動時メッセージ [-h] arg1
起動時メッセージ: error: argument arg1: invalid int value: 'hoge'

# OK
$ python hoge.py 100 
Namespace(arg1=100)

Optional引数

上記の引数は必ず指定しなければならないものでしたが、
引数名の頭に--を付加することで任意引数とすることができます。

parser.add_argument("--arg1", help="arg1のヘルプメッセージ", type=int)

ただしoptional引数の場合、引数値の前に必ずラベルを明示する必要があります。

# optional引数は指定しなくても良い
$ python hoge.py       
Namespace(arg1=None)

# ただし、指定する際はラベルが必要
$ python hoge.py 100
usage: 起動時メッセージ [-h] [--arg1 ARG1]
起動時メッセージ: error: unrecognized arguments: 100
$ python hoge.py --arg1 100
Namespace(arg1=100)
optional引数の短縮形

多くのシェルコマンドと同様に、オプション指定の短縮形も設定することができます。

parser.add_argument("-a", "--arg1", help="arg1のヘルプメッセージ", type=int)
# OK
$ python hoge.py           
Namespace(arg1=None)

# OK
$ python hoge.py --arg1 100
Namespace(arg1=100)

# OK
$ python hoge.py -a 100    
Namespace(arg1=100)

argparserpythonコマンドラインパーサの基本形です。
慣れれば意外と使いやすいですし、何より標準なのでユーザに余計なパッケージを要求しないので一定の制約下では重宝します。

よりシンプルなコマンドラインパーサであるclickなどもおすすめなので、ぜひ使ってみることをおすすめします。

参考

16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.5 ドキュメント

Argparse チュートリアル — Python 3.6.5 ドキュメント