こんにちは!CryptoGamesというブロックチェーンゲーム企業でエンジニアをしているかるでねです!
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。
このブログ以外でも情報発信しているので、よければ他の記事も見ていってください。
https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58
今回はPythonの「argparse」の基礎と「ArgumentParser」の使い方について解説していこうと思います!
「add_argument」についてはこちらを参考にしてください。
「argparse」コマンドライン引数を渡してくれるもので、Pythonエンジニアを目指している方は知っておいた方が良いものになります。
ぜひこの記事でマスターしていってください!
この記事はPythonの公式ドキュメントを参考にしています。
Pythonに限らず、プログラミング言語の公式ドキュメントは非常に読みにくいので、この記事でわかりやすく解説していきます。
「argparse使ってみたい」
「コマンドライン引数を渡してみたい」
「argparseって何?」
「自作モジュール作ってみたい」
このような人のお役に立てれば幸いです。
それでは早速本題に入っていきましょう!
「argparse」はPythonの基礎を理解していないと難しいので、Pythonの基礎を理解していない人は以下を参考に学習してください!
概要
まずはargparse
について説明していきましょう。
argparse
は一言で言えば以下のようになります。
コマンドライン引数を渡せる。
これではよくわからないですよね。
「コマンドライン引数」とは、以下のようにPythonファイルを呼び出す際に渡せる値のことです。
python main.py --n cardene --age 30
少し詳しく説明すると、--n
はname
で今回はcardene
を渡しています。
--age
は30
という値を渡しています。
def user_profile(name, age):
print(name)
print(age)
こんな感じの関数があったとして、cardene
がname
引数に、30
がage
に渡されるということです。
どうでしょうか理解できたでしょうか?
このように引数が指定されることで、ユーザーごとにカスタムして使えるようにになります。
僕自身Pypiに自作モジュールをあげたことがあります。
このモジュールもterminal
でも使用することができ、その際には「コマンドライン引数」を渡す必要があります。
この記事ではその方法を学んでいきます。
「コマンドライン引数」を設定する際、結構細かく設定できるのでぜひ全てマスターしていってください!
基本
まずは基本的な使い方をざっくりみていきます。
理解できなくても大丈夫なのでまずはみていきましょう!
まずはArgumentParser
オブジェクトを作成することから始める。
import argparse
parser = argparse.ArgumentParser(description='かるでねブログ用のテストコード')
parser
というオブジェクトを作成しました。
ここに2つの「コマンドライン引数」を追加していきます。
import argparse
parser = argparse.ArgumentParser(description='かるでねブログ用のテストコード')
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
name
とage
という引数を追加しました。
terminal
で確認してみましょう。
python main.py --h
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
かるでねブログ用のテストコード
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
1行目のコマンドをterminal
に入力すると以下のように出力されます。
--h
はhelp
の略で、「コマンドライン引数」の使い方を確認できます。
positional arguments
は必須に引数です。
optional arguments
はオプションの引数で、なくても問題ないものです。
コード上でどう指定するかというと、Pythonコードのname
と--age
の部分を見ればわかります。
--
というのが先頭についていると「オプション引数」で、ついていないと「必須引数」となります。
早速「コマンドライン引数」を渡してみましょう!
terminal
で以下のコマンドを実行してください。
python main.py cardene -a 30
name
にcardene
を渡し、age
に30
を渡しました。
Namespace(name=['cardene'], age=[30])
そうすると上記のように出力されました。
ここまでで基本的な使い方を確認しました!
ArgumentParser
前章の一番最初に作成したものがArgumentParser
です。
import argparse
parser = argparse.ArgumentParser(description='かるでねブログ用のテストコード')
ArgumentParser
を定義して「パーサー」オブジェクト作成することができます。
このArgumentParser
には上のdescription
のように渡せる引数がいくつかあります。
混乱させてしまうと思うので補足しますが、ここでの引数は「コマンドライン引数」ではありません。
まずは一覧でみていきましょう。
引数一覧
ポイント
- prog
- プログラム名。
- usage
- プログラムの利用方法。
- description
- ヘルプの前に表示されるテキスト。
- epilog
- ヘルプの後で表示されるテキスト。
- parents
- 親の
ArgumentParser
の引数を継承する。
- 親の
- formatter_class
- ヘルプ出力をカスタマイズ。
- prefix_chars
- 引数の接頭辞をカスタマイズ。
- fromfile_prefix_chars
- ファイルから引数を読み込み。
- conflict_handler
- オプション引数の衝突を解消。
- add_help
h/--help
オプションのをパーサーに追加、除外する。
- allow_abbrev
- オプション引数を短くしても反映できるようにする。
結構多くいですよね...。
説明も簡潔にしているので理解できないものばかりだと思います。
この章で1つずつ紹介していくので、この記事を読み終わることにはArgumentParser
を使いこなせるようになります。
では早速みていきましょう!
この記事ではファイル名を全てmain.py
としています。
prog
プログラム名を自分の好きなものに設定できる。
まずは設定していないものから見ていきましょう。
これ以降、基本的に何も設定していないものから確認していきます。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
1行目のmain.py
がプログラム名です。
ではこの部分を自分の好きなものに変えてみましょう。
import argparse
parser = argparse.ArgumentParser(prog="かるでねパーサー")
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
3行目のprog="かるでねパーサー"
でプログラム名を設定しています。
terminal
でpython main.py --h
と実行してください。
usage: かるでねパーサー [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
1行目の先ほどmain.py
となっているのがかるでねパーサー
にしっかり代わっていますね。
usage
プログラムの使用方法を説明。
何も設定していないものを確認します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
1行目の[-h] [--age AGE [AGE …]] name [name …]
がプログラムの説明です。
ここを自分の好きなものにしていきましょう。
import argparse
parser = argparse.ArgumentParser(usage="%(prog)s name [options]")
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
3行目のusage="%(prog)s name [options]"
でプログラム説明を設定しています。
%(prog)s
はプログラム名が自動で入ります。
terminal
でpython main.py --h
と実行してください。
usage: main.py name [options]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
1行目がusage: main.py name [options]
となっているので設定した通りに表示されていることを確認できますね。
description
プログラムの説明。
先ほどのusage
と違って、こちらはプログラム自体の説明を表示します。
何も設定していないものを確認します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
何も指定していないとプログラムの説明は表示されません。
何か設定してみま何か設定してみましょう。
import argparse
parser = argparse.ArgumentParser(description="かるでねブログで解説する用のパーサーだよ!!!")
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
3行目のdescription="かるでねブログで解説する用のパーサーだよ!!!"
で説明を定義しています。
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
かるでねブログで解説する用のパーサーだよ!!!
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
3行目に先ほど設定した通りに表示されていますね。
epilog
引数の説明の後に追加の説明をする。
何も設定していないものを確認します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
こちらもデフォルトでは何も表示されません。
早速設定してみましょう。
import argparse
parser = argparse.ArgumentParser(epilog="引数はこんなものかな!!!")
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
3行目のepilog="引数はこんなものかな!!!"
で設定しています。
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
引数はこんなものかな!!!
一番最後の行で先ほど設定した通りのメッセージが表示されていますね。
parents
親のパーサーを継承。
「パーサー」は複数定義でき、別の「パーサー」を継承することができます。
継承することで、継承元の「コマンドライン引数」を受け継ぐことができます。
説明をわかりやすくするために「親」や「継承」という言葉を使っていますが、言葉としては適切ではないので理解の助け程度に収めてください。
何も設定していないものを確認します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
何も設定していないものを確認したところで、パーサーを2つ定義してみていきましょう。
import argparse
parent_parser = argparse.ArgumentParser(add_help=False)
parent_parser.add_argument('sex', type=str, nargs='+', default='none', help='性別')
parser = argparse.ArgumentParser(parents=[parent_parser])
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
3,4行目でparent_parser
という継承元の「パーサー」を定義しています。
この「パーサー」では性別を渡すことを想定しています。
add_help
がTrue
だと-h
や--help
としたときに、親と子の「パーサー」のhelp
が両方とも呼ばれてしまいエラーが起きてしまいます。
それを防ぐためにadd_help=False
としています。
一応エラー文も出しておきます。
argparse.ArgumentError: argument -h/--help: conflicting option strings: -h, --help
では早速実行してみましょう。
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] sex [sex ...] name [name ...]
positional arguments:
sex 性別
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
4行目にsex 性別
と表示されているのでしっかり継承されていますね!
formatter_class
help
の出力をカスタマイズ。
4種類の方法でhelp
の出力を自分好みにカスタマイズできます。
何も設定していないものを確認します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
何も指定してない表示を確認できたので早速1つ1つみていきましょう。
RawDescriptionHelpFormatter
改行されずそのまま表示される。
import argparse
parser = argparse.ArgumentParser(
prog='かるでねパーサー',
formatter_class=argparse.RawDescriptionHelpFormatter,
description='''
かるでねパーサー
================================================================
わかりやすく解説してるよ!
Pythonエンジニアを目指してる人は習得しておいた方がいい!
''',
epilog='''
***********************
かるでねパーサーの説明終了!
***********************
'''
)
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
ここまでの章で見てきた、prog
、description
、epilog
を使用しています。
何か忘れてしまった方は上に戻って復習してみてください。
terminal
でpython main.py --h
と実行してください。
usage: かるでねパーサー [-h] [--age AGE [AGE ...]] name [name ...]
かるでねパーサー
================================================================
わかりやすく解説してるよ!
Pythonエンジニアを目指してる人は習得しておいた方がいい!
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
***********************
かるでねパーサーの説明終了!
***********************
自分が指定したように表示されていますね。
RawTextHelpFormatter
空白を維持して表示される。
import argparse
parser = argparse.ArgumentParser(
prog='かるでねパーサー',
formatter_class=argparse.RawTextHelpFormatter,
description='''
かるでねパーサー
================================================================
わかりやすく解説してるよ!
Pythonエンジニアを目指してる人は習得しておいた方がいい!
''',
epilog='''
***********************
かるでねパーサーの説明終了!
***********************
'''
)
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
こちらは先ほどと同じですね。
terminal
でpython main.py --h
と実行してください。
usage: かるでねパーサー [-h] [--age AGE [AGE ...]] name [name ...]
かるでねパーサー
================================================================
わかりやすく解説してるよ!
Pythonエンジニアを目指してる人は習得しておいた方がいい!
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
***********************
かるでねパーサーの説明終了!
***********************
先ほどと同じですね...。
そこまで差はないようですね。
ArgumentDefaultsHelpFormatter
「コマンドライン引数」のデフォルト値を表示してくれる。
import argparse
parser = argparse.ArgumentParser(
prog='かるでねパーサー',
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
先ほどより短くなっていますね。
早速みてみましょう。
terminal
でpython main.py --h
と実行してください。
usage: かるでねパーサー [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age (default: None)
最後の行で(default: None)
と表示されています。
先程までは表示されていなかったので確認してみてください。
MetavarTypeHelpFormatter
「コマンドライン引数」のtype
を表示してくれる。
type
とはデータの型のことです。
str
やint
などのことですね。
import argparse
parser = argparse.ArgumentParser(
prog='かるでねパーサー',
formatter_class=argparse.MetavarTypeHelpFormatter,
)
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
5行目でformatter_class=argparse.MetavarTypeHelpFormatter
と定義していますね。
terminal
でpython main.py --h
と実行してください。
usage: かるでねパーサー [-h] [--age int [int ...]] str [str ...]
positional arguments:
str username
optional arguments:
-h, --help show this help message and exit
--age int [int ...], -a int [int ...]
user age
4行目にstr
、8行目にint
と表示されていますね。
prefix_chars
「コマンドライン引数」の接頭辞を変更。
「コマンドライン引数」の接頭辞(--
の部分)はデフォルトでは--
しか設定できません。
今回のprefix_chars
を使うことで、--
以外も設定できるようになります。
何も設定していないものを確認します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
何も指定しないとエラーが出ます。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('++age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
ValueError: invalid option string '++age': must start with a character '-'
今回は++
を設定できるようにしましょう。
import argparse
parser = argparse.ArgumentParser(prefix_chars='-+')
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('++age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
3行目のprefix_chars='-+'
で-
と+
のどちらでも指定できるようになりました。
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [++age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
++age AGE [AGE ...], -a AGE [AGE ...]
user age
8行目で++
と設定できていますね。
fromfile_prefix_chars
ファイルから「コマンドライン引数」を呼び出す。
「コマンドライン引数」が長くなると入力するのが大変になってしまいます。
そこでファイルにあらかじめ書いておき、それを呼び出す方法があります。
import argparse
parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
parser.add_argument('--profile', '-p', nargs='+', type=str, help='user profile')
args = parser.parse_args()
print(args)
3行目のfromfile_prefix_chars='@'
と設定することで、@
以降に指定されたファイルから呼び出すことができます。
test.txt
というファイルを作って、以下のように書き込んでください。
--profile
cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene
terminal
でpython main.py cardene @test.txt
と実行してください。
Namespace(name=['cardene'], age=None, profile=['cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene cardene'])
ちょっと長くなってしまいましたが、ちゃんとtest.txt
を読み込んでくれていますね。
conflict_handler
同じ引数名のコンフリクトを解消。
通常同じ「コマンドライン引数」名を定義すると、どちらを指定しているかわからずエラーになります。
しかし、conflict_handler
を使うとコンフリクトが起きずエラーになりません。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user old age')
parser.add_argument('--age', nargs='+', type=int, help='user new age')
args = parser.parse_args()
--age
という「コマンドライン引数」が2つありますね。
terminal
でpython main.py --h
と実行してください。
argparse.ArgumentError: argument --age: conflicting option string: --age
エラーが出ましたね。
ではこのコンフリクトを解消してみましょう。
import argparse
parser = argparse.ArgumentParser(conflict_handler='resolve')
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user old age')
parser.add_argument('--age', nargs='+', type=int, help='user new age')
args = parser.parse_args()
3行目でconflict_handler='resolve'
と指定することでコンフリクトを解消できます。
terminal
でpython main.py --h
と実行してください。
片方の「コマンドライン引数」の指定方法が-a
というように複数指定していないとconflict_handler
は使えません。
usage: main.py [-h] [-a AGE [AGE ...]] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
-a AGE [AGE ...] user old age
--age AGE [AGE ...] user new age
エラーが起きず表示できましたね。
8行目と9行目をみると、後に定義した方が優先されているのが確認できますね。
add_help
help
を呼べるようにする・できないようにする。
デフォルトでは-h
か--help
とすることでプログラムの使い方や説明などを表示してくれます。
これはadd_help
という引数がデフォルトでTrue
になっているからです。
ではこのadd_help
をFalse
にしてみましょう。
何も設定していないものを確認します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')
args = parser.parse_args()
terminal
でpython main.py --h
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
positional arguments:
name username
optional arguments:
-h, --help show this help message and exit
--age AGE [AGE ...], -a AGE [AGE ...]
user age
これを表示できなくしていきます。
import argparse
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', nargs='+', type=int, help='user age')
args = parser.parse_args()
3行目でadd_help=False
とすることで、-h
や--help
が使えなくなります。
自分で改めて-h
や--help
というコマンドライン引数を指定すれば使えます。
terminal
でpython main.py --h
と実行してください。
usage: main.py [--age AGE [AGE ...]] name [name ...]
main.py: error: the following arguments are required: name
2行目でnameが指定されていないよ!
と怒られていますね。
先ほどまでは使用できていたhelp
コマンドを使えなくなっていることを確認できますね。
allow_abbrev
「コマンドライン引数」の短縮を許す・許さない。
デフォルトでは「コマンドライン引数」を短縮しても読み込まれます。
例えば--age
を--ag
と入力してもちゃんと紐づけて読み込んでくれます。
これはallow_abbrev
という引数がデフォルトでTrue
になっているためです。
今回はこのallow_abbrev
をFalse
にしてみます。
何も設定していないものを確認します。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', nargs='+', type=int, help='user age')
args = parser.parse_args()
print(args)
terminal
でpython main.py cardene --ag 30
と実行してください。
Namespace(name=['cardene'], age=[30])
--ag
としても読み込まれていることが確認できましたね。
では読み込めなくしてみましょう。
import argparse
parser = argparse.ArgumentParser(allow_abbrev=False)
parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', nargs='+', type=int, help='user age')
args = parser.parse_args()
print(args)
3行目でallow_abbrev=False
と指定して、短縮機能をオフにしています。
terminal
でpython main.py cardene --ag 30
と実行してください。
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]
main.py: error: unrecognized arguments: --ag 30
2行目で--ag
なんて知らないよと言われてしまっていますね。
ちゃんと無効にできていることを確認できました。
最後に
今回は「argparse」の基礎と「ArgumentParser」の使い方について解説してきました。
今回の知識だけでは「argparse」を使いこなすことはできません。
しかし全部解説すると長くなってしまうので別記事で紹介しています。
ぜひそちらも併せて読んでいただければと思います。
自分で調べたい方はぜひ以下を参考にしてみてください。
普段はPythonやブロックチェーンメインに情報発信をしています。
Twiiterでは図解でわかりやすく解説する投稿をしているのでぜひフォローしてくれると嬉しいです!
Tweets by cardene777