argparseは、コマンドラインプログラムの引数を解析するのに便利なモジュールで、C言語のgetopt的なものです。似たような機能をもつモジュールとしてgetoptモジュール(C言語のものと同等)、optparseモジュールがありますがそれらは古いモジュールで、argparseを使うのが推奨されてるようです。
基本的な使い方
import argparse
p = argparse.ArgumentParser()
p.add_argument("foo") # 位置引数fooを定義
args = p.parse_args() # デフォルトでsys.argvを解析
print(args.foo)
このように作成したtest.pyファイルを、引数なしで実行してみます。
$ python test.py
usage: test.py [-h] foo
test.py: error: too few arguments
エラーが発生して、簡易的なヘルプメッセージが表示されました。
引数を指定することで解析は成功し、args.fooから引数の値を参照することができます。
$ python test.py hello
hello
オプション引数
引数に、-fや–fooのようにハイフンで始まるようにするとオプション引数(位置で決まらない引数)になる。
p = argparse.ArgumentParser()
p.add_argument('-f', '--foo') #短い引数-f 長い引数--fooを定義
args = p.parse_args(['--foo', 'hello'])
print(args.foo) # hello
よく使う使い方
短い引数、長い引数、ヘルプあたりを指定するのが楽。
p.add_argument("-b", "--bar", help="bar argument")
type指定, choice指定
p.add_argument('-n', type=int) #整数のみ
p.add_argument('-f', type=open) #ファイル
p.add_argument('-a', type=int, choices=[1,2,3]) #整数1,2,3のどれか
default指定
引数が指定されたなかった時のデフォルト値を定義。
p.add_argument('-n', default=1)
args = p.parse_args([])
print(args.n) # 1
const指定
フラグの指定のみで固定値が引数に設定される。
p.add_argument("-n", const=9, nargs="?") #nargsは引数の数が0 or 1
args = p.parse_args(["-n"]) # 0の時はconstが使用される
print(args.n) #9
args = p.parse_args(["-n", "1"])
print(args.n) # 1
action指定
action指定では、解析した引数をどのように格納するかを指定できる。
store_trueアクションは、フラグが指定されたことでTrueが設定されるアクション。
p.add_argument("-y", action="store_true")
print(p.parse_args(["-y"])) #True
print(p.parse_args([])) # False
-hを置き換えながら–helpはヘルプとして利用したい場合
-h, –helpはデフォルトでヘルプ機能になっているが、これが邪魔な場合は、add_help=Falseで作成すると良い。
邪魔で消したものの、他のオプション引数でヘルプを使いたい場合は、action=”help”で追加すれば良い。
-hは消して、–helpだけでヘルプを使う場合は、add_help=Falseで追加しないようにしてから、あらためて–helpをaction=”help”で追加する。
p = argparse.ArgumentParser(add_help=False)
p.add_argument("--help", action="help")
p.add_argument("-h", "--host", help="some hostname")
16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.4.3 ドキュメント