Qstairs

起業に向けた活動、およびAndroid・画像認識(人工知能、Deep Learning等)の技術を紹介します

広告

【Python】便利な引数管理「argparse」の基本的なソースコード(int,float,str,bool)

f:id:qstairs:20160601221351j:plain

はじめに

最近仕事でPythonを使って簡単なツールを作ることが増えてきました。
これまでほとんどC++しか使っていなかった私にとって、
Pythonはとてつもなく扱いやすくて、楽で、早く開発できる最強のソースコードとなっています。

とはいえ、Pythonのすべての関数を覚えられるわけもなく、
何度も使い方を調べなおすということもしばしば...
なので、覚えられるように私なりにまとめます。

まずは、これは素晴らしいと私が唸った引数操作「argparse」の基本的な使い方についてまとめます。

実装方法

使い方は、「argparse」をインポートして設定したい引数をつらつら書いていくだけです。
引数に対して様々な細かい操作ができるようですが、
一般的に使う場合は以下のソース程度でよいのではないでしょうか。

# -*- coding:utf-8 -*-
import argparse

parser = argparse.ArgumentParser("Argument Util")
parser.add_argument("--integer", "-i", type=int, default=0 ,help="Argument:Integer")
parser.add_argument("--float", "-f", type=float, default=0.0, help="Argument:Float")
parser.add_argument("--string", "-s", type=str, default="default", help="Argument:String")
# 引数に「--bool_true」または「-bt」を加えるとargs.bool_trueがTrueになる
parser.add_argument("--bool_true", "-bt", action='store_true', help="Argument:Bool True")
# 引数に「--bool_false」または「-bf」を加えるとargs.bool_falseがFalseになる
parser.add_argument("--bool_false", "-bf", action='store_false', help="Argument:Bool False")
args = parser.parse_args()


print "Argument:Integer     ->  %d"%args.integer
print "Argument:Float       ->  %f"%args.float
print "Argument:String      ->  %s"%args.string
print "Argument:Bool True   ->  %s"%args.bool_true
print "Argument:Bool False  ->  %s"%args.bool_false

上のソースでは、
int,float,str,boolを引数で受け取り、表示するという単純な処理です。
見ての通り、
「add_argument」で引数を追加していけばいいだけです。

実行結果

実際に実行した結果が以下になります。
今回は、引数がない場合と引数を付けた場合の結果を載せています。

引数なし

~\python\util>python argument_util.py
Argument:Integer     ->  0
Argument:Float       ->  0.000000
Argument:String      ->  default
Argument:Bool True   ->  False
Argument:Bool False  ->  True


引数あり

~\python\util>python argument_util.py -i 100 -f 0.5 -s test -bt -bf
Argument:Integer     ->  100
Argument:Float       ->  0.500000
Argument:String      ->  test
Argument:Bool True   ->  True
Argument:Bool False  ->  False

さらに

上の例では引数を指定していなくても処理は実行されます。
しかし、時には必ず引数を指定する必要がある場合があります。
そんなときには、
「add_argument」に「required=True」を追加します。

parser.add_argument("--integer", "-i", type=int, default=0, required=True, help="Argument:Integer")

上のように設定し、引数なしで実行した場合、
以下のようにエラーを出力してくれます。
しかもusageも自動で出力してくれます!(すばらしい!)

~\python\util>python argument_util.py
usage: Argument Util [-h] --integer INTEGER [--float FLOAT] [--string STRING]
                     [--bool_true] [--bool_false]
Argument Util: error: argument --integer/-i is required

最後に

以上が「argparse」の基本的な使い方になります。
いかがだったでしょうか。
これをC++で真面目にやろうとすれば大変ですよね(^_^;

今後もPythonの使い方を紹介できればと思います。
Pythonライフを満喫しましょう!

広告