概要
pythonでオプション付きのコマンドを作成する方法。
argparseというモジュールを使います。
関連記事
pythonスクリプトを作成
sampleというファイル名で作成する。
sample
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import argparse
'''
引数の定義
-a, -bは必須
-c, -dは任意
'''
def get_args():
psr = argparse.ArgumentParser()
psr.add_argument('-a', '--alpha', required=True, help='A explanation for arg called a')
psr.add_argument('-b', '--bravo', required=True, help='A explanation for arg called b')
psr.add_argument('-c', '--charlie', help='A explanation for arg called c')
psr.add_argument('-d', '--delta', help='A explanation for arg called d')
return psr.parse_args()
if __name__ == '__main__':
args = get_args()
print(args.alpha)
print(args.bravo)
print(args.charlie)
print(args.delta)
help
--helpもしくは-hを指定する。
$ ./sample --help
usage: sample [-h] -a ALPHA -b BRAVO [-c CHARLIE] [-d DELTA]
optional arguments:
-h, --help show this help message and exit
-a ALPHA, --alpha ALPHA
A explanation for arg called a
-b BRAVO, --bravo BRAVO
A explanation for arg called b
-c CHARLIE, --charlie CHARLIE
A explanation for arg called c
-d DELTA, --delta DELTA
A explanation for arg called d
必須オプションである-a, -bを指定しないとエラーとなる。
$ ./sample
usage: sample [-h] -a ALPHA -b BRAVO [-c CHARLIE] [-d DELTA]
sample: error: argument -a/--alpha is required
実行例
オプションを全て付与して実行する。
$ ./sample -a sample001 -b sample002 -c sample003 -d sample004
sample001
sample002
sample003
sample004
オプションは順不同。
$ ./sample -c sample003 -d sample004 -b sample002 -a sample001
sample001
sample002
sample003
sample004
必須オプションのみ指定。
$ ./sample -a sample001 -b sample002
sample001
sample002
None
None
--alphaは-a, --bravoは-b、--charlieは-c、--deltaは-dと同義。
$ ./sample --alpha sample001 --bravo sample002 --charlie sample003 --delta sample004
sample001
sample002
sample003
sample004
引数未指定の場合は無視する
import argparse
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="This is a description")
parser.add_argument(
"-o",
"--opt",
help="Extra args",
type=str,
nargs="?",
const=None,
default=None,
)
return parser.parse_args()
nargs="?"(値は 0 個または 1 個)
その引数は “値があってもなくてもよい” という指定です。
オプション引数(--opt のようなもの)で使うと次の挙動になります。
| 入力ケース | 結果(値の入り方) |
|---|---|
--opt foo |
foo(値が1つ与えられた) |
--opt |
const で指定した値(未指定なら None) |
(--opt なし) |
default で指定した値(未指定なら None) |