Pythonでコマンドライン引数を渡す方法は知る限り下記の3種類ある。
1. sys.argv
2. argparser
3. docopt
このうち、主に上の2つを紹介する。
sys.argv
最も簡単な方法。
コマンドラインの引数を配列のようにして扱う。
sample
import sys print('script name : %s'%sys.argv[0]) print(sys.argv[1])
$ python parsers.py hello script name : parsers.py hello
使い方
sys.argsに配列としてコマンドライン引数が入っている。0番目はプログラムの名前に当たるので、1番目以降を引数として使うことになる。
argparser
sys.argvでは引数の個数も決めておかないといけないし順番もバラバラではいけない。
使い方がわからなくなったとしたら、ソースを読むしかない。
これに対してargparserではシェルのコマンドのように"--help"や"-h"を引数にすることでヘルプを表示させることができる。
また、引数の順番関係なくオプション指定で引数を渡すことができる(`-i hello -m 10`と`-m 10 -i hello`は同じ意味になる)
人に使ってもらうようなプログラムや大規模なプログラムを書くときはargparserを使うのが一番良いと思う。
sample
import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max,help='sum the integers (default: find the max)') parser.add_argument('--display',action='store_true') args = parser.parse_args() if(args.display): print('result :') print(args.accumulate(args.integers))
$ python parsers.py 1 2 3 --display result : 3 $ python parsers.py 1 2 3 --sum 6 $ python parsers.py -h usage: parsers.py [-h] [--sum] [--display] N [N ...] Process some integers. positional arguments: N an integer for the accumulator optional arguments: -h, --help show this help message and exit --sum sum the integers (default: find the max) --display
使い方
大まかな使い方としては
1.パーサーを作る
2.引数を追加する
3.引数を解析する
という順番になっている。
詳しくは下のリンク先を見てもらうとして、
引数を追加するadd_parser()の引数だけ示しておく。
name または flags - 名前か、あるいはオプション文字列のリスト (例: foo や -f, --foo)。
action - コマンドラインにこの引数があったときのアクション。
nargs - 受け取るべきコマンドライン引数の数。
const - 一部の action と nargs の組み合わせで利用される定数。
default - コマンドラインに引数がなかった場合に生成される値。
type - コマンドライン引数が変換されるべき型。
choices - 引数として許される値のコンテナー。
required - コマンドラインオプションが省略可能かどうか (オプション引数のみ)。
help - 引数が何なのかを示す簡潔な説明。
metavar - 使用法メッセージの中で使われる引数の名前。
dest - parse_args() が返すオブジェクトに追加される属性名。
docopt
コメントにMarkdownドキュメントっぽく使い方を書いておけばそれをもとにオプション引数を作ってくれるという優れもの。
僕自身まだあまり馴染みがなく偉そうな事は書けないので、解説は下のリンクに譲る。
Pythonのdocopt使い方メモ - Qiita
Pythonのコマンドライン引数処理の決定版 docopt (あとJuliaに移植したよ) - りんごがでている