Pythonの標準ライブラリargparseで引数をパースする


このエントリーをはてなブックマークに追加

Python 2.7から標準ライブラリに加わったargparseを使うと、簡単に引数のパーサが書けます。詳細はargparseを使ってみた - そこはかとなく書くよ。を見ていただくとして、ここでは基本機能だけ書きます。

目標

以下のようなargparse_test.pyを作ることを目標とします。

(1)ヘルプの表示

$ ./argparse_test.py -h
または
$ ./argparse_test.py --help

とすると引数の説明を表示したいです。

(2)ファイルパスの指定

$ ./argparse_test.py -f input_file.txt
または
$ ./argparse_test.py --file input_file.txt

というふうに、ファイルパスを-fまたは--fileで指定したいです。指定しなかったときはデフォルトのファイルがパスが読み込まれるようにしたいです。

(3)冗長な表示の有効化

-vまたは--verboseとすると冗長な出力を有効にできるようにしたいです。

$ ./argparse_test.py -v
または
$ ./argparse_test.py --verbose

実装

以上の目標を満たすコードは以下になります。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import argparse

parser = argparse.ArgumentParser()

# 値を必要とする引数
# default以下に、引数が指定されなかったときの値を書く
parser.add_argument('-f', '--file', default="default_file.txt", help="set input file path")

# 値を必要としない引数
# actionに'store_true'を指定すると、値を必要としないという意味になる
parser.add_argument('-v', '--verbose', action='store_true', help="verbose output")

# 結果を出力
args = parser.parse_args()
print(args.file)
print(args.verbose)

挙動を確認

$ ./argparse_test.py -h

とすると、以下のように自動的にusageを出力してくれます。これはすばらしい。

usage: p222_argparse.py [-h] [-f FILE] [-v]

optional arguments:
  -h, --help            show this help message and exit
  -f FILE, --file FILE  set input file path
  -v, --verbose         verbose output

また、

$ ./argparse_test.py -f input_file.txt

$ ./argparse_test.py -v

とすると、args.fileやargs.verboseに値が反映されていることがわかります。

参考