はじめに
Python実行時、コマンドライン引数を受け取る際に利用するArgumentParserの備忘録です。 内容は必要最低限です。
この内容に関する説明は以下の記事が分かりやすいです。
【参考】ArgumentParserの使い方を簡単にまとめた
公式ドキュメント
使い方
ライブラリのインストール
※Pythonの標準ライブラリです。
$ pip install argparse
簡単な使い方
test_argparse.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--A')
args = parser.parse_args()
print(args)
print(args.A)
$ python test_argparse.py --A a
Namespace(A='a')
a
他の便利なadd_argumentの使い方
test_argparse.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--A')
parser.add_argument('--B', help = 'この引数の説明')
parser.add_argument('-c', '--C') # 省略系
parser.add_argument('--D', default='hello world')
parser.add_argument('--E', type=int) # 型指定
tp = lambda x : list(map(int, x.split('.')))
parser.add_argument('--F', type=tp)
# 123.456.789 -> [123, 456, 789] のようにできる
parser.add_argument('--G', action='store_true') # フラグ
parser.add_argument('--H', choices=['A', 'B', 'C']) # N択
parser.add_argument('--I', nargs='*') # 複数個
parser.add_argument('--J', nargs=2) # ちょうど2つの引数
parser.add_argument('--K', nargs='+') # 1つ以上の引数
parser.add_argument('--L', nargs='?') # 0または1つの引数
parser.add_argument("-M", required=True) # コマンドラインで必ず指定する
args = parser.parse_args()
print(args)
$ python temp_parseargs.py --A test_A --H B -M test_M
Namespace(A='test_A', B=None, C=None, D='hello world', E=None, F=None, G=False, H='B', I=None, J=None, K=None, L=None, M='test_M')
他の便利な使い方
コード内で属性を動的に変更・追加することができる
test_argparse.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--A')
args = parser.parse_args()
print(args.A)
args.A = 'B' # args.Aを変更
args.B = 'A' #args.Bを追加
print(args.A, args.B)
$ python test_argparse.py --A a
a
B A
複数のArgumentParserオブジェクトを組み合わせる
test_argparse.py
import argparse
# ひとつめ, add_help=Falseとすることで競合を避ける
parser1 = argparse.ArgumentParser(add_help=False)
parser1.add_argument('--A')
# ふたつめ
parser2 = argparse.ArgumentParser(add_help=False)
parser2.add_argument('--B')
# 組み合わせる
combined_parser = argparse.ArgumentParser(
parents=[parser1, parser2]
)
# さらに追加する
combined_parser.add_argument('--C')
args = combined_parser.parse_args()
print(args)
$ python temp.py --A a --B b --C c
Namespace(A='a', B='b', C='c')
グループ化して、可読性を高める
test_argparse.py
import argparse
parser = argparse.ArgumentParser()
# ひとつめ
group1 = parser.add_argument_group("Group 1")
group1.add_argument('--A', help='Aの説明')
group1.add_argument('--B', help='Bの説明')
# ふたつめ
group2 = parser.add_argument_group("Group 2")
group2.add_argument('--C', help='Cの説明')
args = parser.parse_args()
print(args)
$ python temp.py --A a --B b --C c
Namespace(A='a', B='b', C='c')
このように[-h], [--help]オプションで各引数の説明を出力することもできる
$python temp.py -h
usage: temp.py [-h] [--A A] [--B B] [--C C]
options:
-h, --help show this help message and exit
Group 1:
--A A Aの説明
--B B Bの説明
Group 2:
--C C Cの説明
おわりに
ここで紹介した内容はあくまで備忘録であり、最低限です。