Django Python

[Python実践]argparseに挑戦!《ArgumentParser編》

cardene

こんにちは!実務でPython、Djangoを使って、機械学習やWebアプリケーションの開発をしているかるでねです!

今回はPythonの「argparse」の基礎と「ArgumentParser」の使い方について解説していこうと思います!

add_argument」についてはこちらを参考にしてください。

argparse」コマンドライン引数を渡してくれるもので、Pythonエンジニアを目指している方は知っておいた方が良いものになります。

ぜひこの記事でマスターしていってください!

この記事はPythonの公式ドキュメントを参考にしています。

Pythonに限らず、プログラミング言語の公式ドキュメントは非常に読みにくいので、この記事でわかりやすく解説していきます。

argparse使ってみたい

コマンドライン引数を渡してみたい

argparseって何?

自作モジュール作ってみたい

このような人のお役に立てれば幸いです。

それでは早速本題に入っていきましょう!

argparse」はPythonの基礎を理解していないと難しいので、Pythonの基礎を理解していない人は以下を参考に学習してください!

概要

まずはargparseについて説明していきましょう。

argparseは一言で言えば以下のようになります。

コマンドライン引数を渡せる。

これではよくわからないですよね。

コマンドライン引数」とは、以下のようにPythonファイルを呼び出す際に渡せる値のことです。

python main.py --n cardene --age 30

少し詳しく説明すると、--nnameで今回はcardeneを渡しています。

--age30という値を渡しています。

def user_profile(name, age):
    print(name)
    print(age)

こんな感じの関数があったとして、cardenename引数に、30ageに渡されるということです。

どうでしょうか理解できたでしょうか?

このように引数が指定されることで、ユーザーごとにカスタムして使えるようにになります。

僕自身Pypiに自作モジュールをあげたことがあります。

Comnamepy

このモジュールも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()

nameageという引数を追加しました。

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に入力すると以下のように出力されます。

--hhelpの略で、「コマンドライン引数」の使い方を確認できます。

positional argumentsは必須に引数です。

optional argumentsはオプションの引数で、なくても問題ないものです。

コード上でどう指定するかというと、Pythonコードのname--ageの部分を見ればわかります。

--というのが先頭についていると「オプション引数」で、ついていないと「必須引数」となります。

早速「コマンドライン引数」を渡してみましょう!

terminalで以下のコマンドを実行してください。

python main.py cardene -a 30

namecardeneを渡し、age30を渡しました。

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()

terminalpython 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="かるでねパーサー"でプログラム名を設定しています。

terminalpython 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()

terminalpython 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 はプログラム名が自動で入ります。

terminalpython 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()

terminalpython 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="かるでねブログで解説する用のパーサーだよ!!!"で説明を定義しています。

terminalpython 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()

terminalpython 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="引数はこんなものかな!!!"で設定しています。

terminalpython 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()

terminalpython 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_helpTrueだと-h--helpとしたときに、親と子の「パーサー」のhelpが両方とも呼ばれてしまいエラーが起きてしまいます。

それを防ぐためにadd_help=Falseとしています。

一応エラー文も出しておきます。

argparse.ArgumentError: argument -h/--help: conflicting option strings: -h, --help

では早速実行してみましょう。

terminalpython 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()

terminalpython 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()

ここまでの章で見てきた、progdescriptionepilogを使用しています。

何か忘れてしまった方は上に戻って復習してみてください。

terminalpython 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()

こちらは先ほどと同じですね。

terminalpython 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()

先ほどより短くなっていますね。

早速みてみましょう。

terminalpython 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とはデータの型のことです。

strintなどのことですね。

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と定義していますね。

terminalpython 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()

terminalpython 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='-+'-+のどちらでも指定できるようになりました。

terminalpython 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

terminalpython 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つありますね。

terminalpython 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'と指定することでコンフリクトを解消できます。

terminalpython 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_helpFalseにしてみましょう。

何も設定していないものを確認します。

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()

terminalpython 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というコマンドライン引数を指定すれば使えます。

terminalpython 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_abbrevFalseにしてみます。

何も設定していないものを確認します。

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)

terminalpython 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と指定して、短縮機能をオフにしています。

terminalpython 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では図解でわかりやすく解説する投稿をしているのでぜひフォローしてくれると嬉しいです!

-Django, Python
-,