Pythonでbool値の引数をargparse

引数にTrue/Falseの値を渡してargparseでパースして使いたい.
ということでメモ.
ぐぐったらこういうやり方が出てきた.

def parse():
    parser = argparse.ArgumentParser(description='Argparseのテスト')
    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    parser.add_argument('--force', dest='force', action='store_true')
    parser.add_argument('--no-force', dest='force', action='store_false')
    parser.set_defaults(force=False)
    params = parser.parse_args()
    return vars(params)

この –force/–no-force の指定で force の値が True/False になる.デフォルトはFalse.
ただ,これだと

python hoge.py --force --no-force

みたいに両方指定することも可能なのでまずい.
そこで,mutually_exclusive_groupを使って,

def parse():
    parser = argparse.ArgumentParser(description='Argparseのテスト')
    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    group = parser.add_mutually_exclusive_group()
    group.add_argument('--force', action='store_true')
    group.add_argument('--no-force', action='store_false')
    parser.set_defaults(force=False)
    params = parser.parse_args()
    return vars(params)

とすることで,両方指定した時にエラーを出すことが出来る.

コメントする