argparseでコマンドライン引数の解析

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 ドキュメント

関連記事:

argparseでコマンドライン引数の解析」への2件のフィードバック

  1. ピンバック: Pythonのコマンドライン解析 « hot-fix

  2. ピンバック: [実習] TCPプログラミング - YUEDY

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)