Ad

コマンドライン引数の取得 anchor.png Edit

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」に最初に実行しているファイル名、残りにコマンドライン引数が入っています。

Page Top

argparseでコマンドライン引数をよりうまくあつかう anchor.png Edit

簡単なコマンドライン引数の取得なら「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を参照してください。


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1235, today: 2, yesterday: 0
Princeps date: 2016-12-24 (Sat) 13:38:02
Last-modified: 2016-12-28 (Wed) 07:08:47 (JST) (1023d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF