技術メモ

役に立てる技術的な何か、時々自分用の覚書。幅広く色々なことに興味があります。

Pythonでコマンドライン引数を渡す方法3種類

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"を引数にすることでヘルプを表示させることができる。
人に使ってもらうようなプログラムや大規模なプログラムを書くときは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() が返すオブジェクトに追加される属性名。