0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ArgumentParserの備忘録

Posted at

はじめに

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の説明

おわりに

ここで紹介した内容はあくまで備忘録であり、最低限です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?