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を参照してください。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 3021, today: 2, yesterday: 0
初版日時: 2016-12-24 (土) 13:38:02
最終更新: 2016-12-28 (水) 07:08:47 (JST) (2637d) by njf
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF