1: 2016-12-24 (土) 13:38:02 njf[5] [6] [7] | 現: 2016-12-28 (水) 15:08:47 njf[5] [8] [9] | ||
---|---|---|---|
Line 1: | Line 1: | ||
*コマンドライン引数の取得 [#gf1ebe46] | *コマンドライン引数の取得 [#gf1ebe46] | ||
- | *コマンドライン引数をよりうまくあつかう [#s3231922] | + | Python実行時のコマンドライン引数は以下のようにして取得できます。 |
+ | |||
+ | import sys | ||
+ | |||
+ | for a in sys.argv: | ||
+ | print a | ||
+ | |||
+ | これ「arg_test.py」という名前で保存して実行すると | ||
+ | |||
+ | $ python arg_test.py a1 a2 a3 a4 | ||
+ | arg_test.py | ||
+ | a1 | ||
+ | a2 | ||
+ | a3 | ||
+ | a4 | ||
+ | |||
+ | のように、「sys.argv」に最初に実行しているファイル名、残りにコマンドライン引数が入っています。 | ||
+ | |||
+ | *argparseでコマンドライン引数をよりうまくあつかう [#s3231922] | ||
+ | |||
+ | 簡単なコマンドライン引数の取得なら「sys.argv」で十分ですが、実際のプログラムだと例えば「-h」や「--help」と引数を指定すればヘルプメッセージを出したり、必要な引数がなければエラーを出したりしたくなります。 | ||
+ | |||
+ | ですが、「sys.argv」だけを使って自力でそれらを作ると結構な手間となります。そこで、Pythonにはそれらの機能を実装するのに役立つ「argparse」というモジュールが用意されています。 | ||
+ | |||
+ | # -*- coding: utf-8 -*- | ||
+ | import argparse | ||
+ | |||
+ | parser = argparse.ArgumentParser(description=u'二個の整数の引数をそのまま出力します') | ||
+ | parser.add_argument("a1", help=u"数値1", type=int) | ||
+ | parser.add_argument("a2", help=u"数値2", type=int) | ||
+ | |||
+ | args = parser.parse_args() | ||
+ | print args.a1, args.a2 | ||
+ | |||
+ | これを以下のように実行すると、 | ||
+ | |||
+ | $ python arg_test.py 2 5 | ||
+ | 結果 | ||
+ | 2 5 | ||
+ | となります。 | ||
+ | |||
+ | なにも引数無しで実行すると | ||
+ | $ python arg_test.py | ||
+ | 結果 | ||
+ | usage: arg_test.py [-h] a1 a2 | ||
+ | arg_test.py: error: too few arguments | ||
+ | |||
+ | となり、使い方と「引数が少なすぎる」というメッセージを出してくれます。 | ||
+ | |||
+ | 二つ目の引数に数値以外を指定すると、 | ||
+ | $ python arg_test.py 1 a | ||
+ | 結果 | ||
+ | usage: arg_test.py [-h] a1 a2 | ||
+ | arg_test.py: error: argument a2: invalid int value: 'a' | ||
+ | |||
+ | このように、ちゃんと第二引数が不正であるというメッセージが出ます。 | ||
+ | |||
+ | さらに | ||
+ | $ python arg_test.py -h | ||
+ | とすると、 | ||
+ | usage: arg_test.py [-h] a1 a2 | ||
+ | |||
+ | 二個の整数の引数をそのまま出力します | ||
+ | |||
+ | positional arguments: | ||
+ | a1 数値1 | ||
+ | a2 数値2 | ||
+ | |||
+ | optional arguments: | ||
+ | -h, --help show this help message and exit | ||
+ | |||
+ | ちゃんとヘルプメッセージが出ます。 | ||
+ | |||
+ | オプションを指定するには以下のようにします。 | ||
+ | # -*- coding: utf-8 -*- | ||
+ | import argparse | ||
+ | parser = argparse.ArgumentParser(description=u'二個の整数の引数をそのまま出力したり加算したりします') | ||
+ | parser.add_argument("a1", help=u"数値1", type=int) | ||
+ | parser.add_argument("a2", help=u"数値2", type=int) | ||
+ | parser.add_argument("--add", help=u"加算する",action="store_true")#オプション | ||
+ | args = parser.parse_args() | ||
+ | |||
+ | if args.add: | ||
+ | print args.a1 + args.a2 | ||
+ | else: | ||
+ | print args.a1, args.a2 | ||
+ | |||
+ | ここで | ||
+ | parser.add_argument("--add", help=u"加算する",action="store_true")#オプション | ||
+ | が増えています。 | ||
+ | |||
+ | 「action="store_true"」を指定することで、もしオプションとして"--add"が指定されていると、引数をパースしたときに、「add」にTrueが入ります。 | ||
+ | |||
+ | 実行結果は、 | ||
+ | $ python arg_test.py --add 1 2 | ||
+ | 3 | ||
+ | |||
+ | となり、加算されます。「--add」がなければ前の結果と同じです。 | ||
+ | |||
+ | これらの処理を自分で実装するとかなり大変ですが、argparseを使うと数行で実現できます。 | ||
+ | |||
+ | argparseにはこれ以外にもたくさんの機能があります。 | ||
+ | 正直多すぎて使いこなせません。 | ||
+ | ちょっとしたツールで使うなら上の例の程度知っておけば十分でしょう。 | ||
+ | |||
+ | 詳しい機能は、とてもここでは紹介しきれないので、公式サイト[[http://docs.python.jp/2/library/argparse.html]]を参照してください。 |
(This host) = https://njf.jp