【Python入門】argparseでコマンドライン引数を使ってみよう!

長野 透
書いた人 長野 透
侍エンジニア塾ブログは、未経験からWebアプリ開発と仕事獲得をサポートする
侍エンジニア塾のオウンドメディアです。
プログラミング学習を覗き見

Pythonの標準モジュールであるargparseを使うと、コマンドラインで動くアプリケーションを作ることが出来ます。

コマンドラインでプログラムを実行させる時にコマンドに引数を渡すと、ヘルプメッセージなどのさまざまな情報を表示してくれます。

今回はコマンドライン引数を扱うときに使えるargparseの使い方について解説します。

【基礎】argparseとは
【実践】引数なしでargparseを使う方法
【実践】引数ありでargparseを使う方法
【おまけ】argparseを使わないで引数をパースする方法

argparseについて、初心者でもわかりやすく解説していますので、ぜひ参考にしてください!

argparseとは

argparseとはPythonの標準ライブラリのひとつで、コマンドライン引数を扱いやすくしてくれるモジュールです。

コマンドライン引数とは、Pythonでプログラムを起動する際に指定する引数のことで、渡された引数はプログラム内で取得して使用することができます。

argparseはヘルプと使用方法のメッセージを作成し、引数の指定に誤りがあった場合にエラーを発生させます。

argparseモジュールを使用することで簡潔にメッセージの作成と引数の解析を行うことができます。

argparseを使ってみよう!

引数なしでargparseを使う方法

まずはargparseを、コマンドの引数がない場合から確認していきましょう。

argparseモジュールのArgumentParserクラスのコンストラクタを使用してパーサーを生成します。

パーサーとは構文解析を行うプログラムや処理のことです。

生成したパーサーからparse_argsメソッドを呼び出し実行すると、引数を解析しヘルプが表示できるようになります。

またArgumentParserクラスのコンストラクタの引数には以下のような設定ができるようになっています。

引数説明
progプログラム名を入力
usageプログラムの利用方法を記述
description引数の説明の前に表示される説明文
epilog引数の説明の後に表示される文字列
add_help[-h]/[–help]オプションの追加の有無

これらの使い方をサンプルコードを確認しながらみていきましょう。

まずはこちらのコードをご覧ください。

こちらのコードを、argparseTest.pyという名前のファイルで実行しています。

コマンドラインでヘルプを表示させるためにこのようなコマンドを入力しました。

実行結果

parserオブジェクトからparse_argsメソッドを呼び出し、引数の解析を実行しています。

実行結果を確認すると、「usage」、「description」、「arguments(引数)」、「epilog」の順で表示されています。

引数ありでargparseを使う方法①

次にコマンドの引数がある場合について確認していきましょう。

引数を追加するためにArgumentParserクラスのadd_argumentメソッドを使用します。

add_argumentメソッドはパーサーを生成した後で、parse_argsメソッドで引数の解析を行う前に指定します。

add_argumentメソッドの引数にはこのような設定ができるようになっています。

まずは、

引数説明
name or flags位置引数もしくはオプション引数の指定
help引数の簡単な説明
action引数の取り扱いの指定
required引数の省略可否(オプション引数のみ)
type引数が変換される型

これらの指定について見ていきましょう。

name or flagsについて

引数が位置引数オプション引数なのかを指定します。

位置引数は関数に対して必須となる引数になります。

対して、オプション引数は与えても与えなくてもどちらでも良い引数になります。

add_argumentメソッドの第1引数で指定します。

オプション引数には接頭辞「–」を付ける必要があり、実行時に引数を指定する場所はどこでも構いません。

オプション引数以外の引数は位置引数として扱われ、実行時の引数の位置は決まっています。

それでは、サンプルコードで確認していきましょう。

実行結果

このサンプルコードでは、add_argumentメソッドの引数で接頭辞「-」がついたオプション引数を指定しています。

接頭辞「–」で短い略語を指定し、接頭辞「—-」で長い名称を指定しています。

実行結果を確認すると、オプション引数(optional arguments):に「-v」、「–-verbose」と追加されているのがわかります。

しかし、「-h」、「–-help」の「show this help message and exit」のような記述が「-v」、「–-verbose」には見当たりません。

これは次の章のhelpで追加していきます。

helpについて

「-h」、「–-help」の「show this help message and exit」のような記述を「-v, –-verbose」にも追加します。

そのためにはhelpの項目を指定します。

サンプルコードを確認してみましょう。

実行結果

このサンプルコードではadd_argumentメソッドのhelpの項目も指定しました。

実行結果を確認すると「select mode」と表示されているのがわかります。

actionについて

actionの項目を指定して、引数の指定によって実行結果が変わることを確認していきます。

actionの項目にはこのような指定が出来ます。

引数説明
storeデフォルト
store_const定数を指定
stotre_true/store_falseTrue値もしくはFalse値を指定します。
appendリストに引数を追加
append_constリストに定数を追加
versionバージョン情報を表示

「store_const」や「append_const」で指定された定数はオプション引数がある場合は使用して、ない場合は使用しないなどの使い方をします。

それではサンプルコードを確認しましょう。

実行結果

このサンプルコードではadd_argmentの引数のactionの項目に「store_true」を指定しています。

引数に「-v」もしくは「–-vebose」の引数があれば「Hello」と出力表示され、なければ「こんにちは」と出力表示されるようになっています。

ヘルプの表示には特に影響はありません。

requiredについて

オプション引数の省略をするかどうかをrequiredの項目で指定します。

位置引数は省略が出来ないので、オプション引数に対して指定します。

省略不可とした場合に、該当のオプション引数を指定しなければ「error: the following arguments are required」とエラーが出力表示されます。

それではサンプルコードを確認していきましょう。

実行結果

このサンプルコードではオプション引数の「 -v, –-verbose 」のrequiredの項目をTrueに指定して、省略を出来ないようにしています。

実行時に引数の指定をしない場合は、「argparseTest: error: the following arguments are required: -v/–-verbose」(引数が必要だ)とエラーが出力されています。

指定通り引数を指定した場合は、処理が実行され「Hello」が表示されています。

こちらもヘルプの表示には反映されていません。

typeについて

引数は何も指定をしなければ、文字列として扱われます。

引数を数値として扱いたい場合などはtypeの項目で指定します。

typeの項目で扱いたい型を指定すると、指定した型で処理を行うことができます。

指定した型と異なる引数を指定すると、「error: argument」とエラーが出力表示されます。

それではサンプルコードで確認しましょう。

実行結果

このサンプルコードではadd_argumentメソッドの位置引数「i」をtypeの項目でintに指定しています。

指定通りに引数にint型を指定すると処理が実行されています。

指定に反して引数にfloat型を指定するとエラーが発生し、「argparseTest: error: argument i: invalid int value: ‘3.0’」(無効なint型の値だ)と出力表示されています。

ヘルプの表示では位置変数(positional arguments)にnameとhelpの項目でそれぞれ指定した内容が表示されています。

引数ありでargparseを使う方法②

ここまで紹介してきた引数の扱い方で全体の半分程度になります。

ここからは、

引数説明
choises引数として許される値の指定
nargs引数の数の指定
default引数がなかった場合に生成される値
metavarメッセージで表示される引数の名前

について、解説します。

より実用的なものが増えてきますが、頭のなかで整理しながら学習していきましょう。

choicesについて

引数には許される値を指定することができ、choicesの項目で指定します。

choicesの項目で指定した以外の値を指定すると、エラー「error: argument」が出力表示されます。

それではサンプルコードを確認していきましょう。

実行結果

このサンプルコードではadd_argmentメソッドのオプション引数「-v, –-verbose」にchoisesの項目を指定しています。

choisesの項目でリストから値を選べるように指定しています。

「-v, –-verbose」をint型に指定し、0(ゼロ)か1か選ぶように指定しています。

実行結果を確認するとリストの0(ゼロ)か1か選んだ場合は処理を実行しています。

リスト以外の値を選んだ場合はエラーが発生し、「argparseTest: error: argument -v/–verbose: invalid choice: 2 (choose from 0, 1)」と出力表示されています。

ヘルプの表示でも選べる値が表示されるようになっています。

nargsについて

引数の数を指定する場合はnargsの項目で指定します。

指定した数以外で指定すると、エラー「error: the following arguments are required」が表示されます。

サンプルコードで確認していきましょう。

実行結果

このサンプルコードではadd_argmentメソッドの位置引数「mul」にnargsの項目を指定しています。

nargsの項目に2を指定しています。

また位置引数「mul」はtypeの項目でint型の指定をしています。

これらの指定によって位置引数「mul」は処理する際にはint型のリストとして扱うことができています。

引数に1つのみ指定した場合はnargsの項目の指定以外となりますので、エラー「argparseTest: error: the following arguments are required: mul」が出力表示されています。

ヘルプの表示には位置引数(positional arguments)として指定した項目が表示されています。

FileTypeについて

コマンドの引数として入力するファイルパス名や出力するファイルパス名を指定することもあります。

そんな場合にはadd_argumentメソッドの引数でtypeの項目をargparse.FileType()で指定します。

入力するファイルパス名を指定する場合はargparse.FileType(‘r’)と指定します。

出力するファイルパス名を指定する場合はargparse.FileType(‘w’)と指定します。

引数を指定しない場合は、エラー「error: the following arguments are required」が出力表示されます。

それではサンプルコードで確認していきましょう。

なお入力するファイルには「infile.txt」、出力するファイルには「outfile.txt」を指定しています。

infile.txt

実行結果

実行結果

outfile.txt

このサンプルコードではadd_argumentメソッドで2つの引数を指定しています。

第1引数のtypeの項目でargparse.FileType(‘r’)と指定して入力ファイルのパス名を指定するようにしています。

第2引数のtypeの項目でargparse.FileType(‘w’)と指定して出力ファイルのパス名を指定するようにしています。

引数の指定が指示通りでなければ、「argparseTest: error: the following arguments are required: infile, outfile」のエラーが出力表示されています。

ヘルプの表示では2つの位置引数(positional arguments)が表示されています。

defaultについて

オプション引数を指定しない場合にdefaultの項目で指定した値を使用して処理します。

サンプルコードを確認していきましょう。

実行結果

このサンプルコードではadd_argumentメソッドのオプション引数「–version」にdefaultの項目を指定しています。

またオプション引数「–version」はactionの項目でversionに指定されていますので、version情報を出力表示します。

defaultの項目の値がFalseで指定していますので、「–version」を引数に指定しない場合はversion情報は出力表示されず、指定した場合はversion情報が「1.0.0」と表示されています。

このバージョン情報は自分のアプリケーションにあった数字にしましょう。

ヘルプの表示にはオプション引数(optional arguments)「–version」として表示されています。

metavarについて

ヘルプやエラーの出力時の引数名を設定したい場合、metavarの項目を指定します。

サンプルコードで確認していきましょう。

実行結果

このサンプルコードではadd_argumentメソッドの位置引数「i」でmetavarの項目を指定しています。

metavarの項目を「int_value」と指定しています。

ヘルプの表示を確認すると位置変数(positional arguments)で「int_value」と表示されています。

argparseを使わないで引数をパースする方法

最後にPythonのargparseを使わないで引数をパース(構文解析)する方法について解説します。

標準のsysモジュールを使って引数をパースします。

こちらのサンプルコードを見てみましょう。

こちらのコードを、argTest.pyという名前で保存して、コマンドラインからこのように実行してみましょう。

実行結果

このように、sys.argsでコマンドライン引数を取得することが出来ました。

sys.argvについては、以下の記事で詳しく解説していますので、ぜひ参考にしてください!

まとめ

ここでは、argparseモジュールの使い方について説明しました。

argparseモジュールの使うことで自作したPythonファイルを実行する際に、引数の解析を実行し不具合がある場合はエラーを表示して返したり、ヘルプを表示することができます。

またコマンドラインから引数を受け取れると、より本格的な自作コマンドを作っていくことが出来ます。

argparseモジュールを使いこなすことができるようにこの記事を何度も参考にして下さいね!

Pythonカリキュラム無料公開中!
この記事はPython入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Python学習に必要な情報を一つにまとめていますので効率よくPythonを学ぶことが出来ます。この機会に是非活用していただければと思います。



33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーランスをされている市川友哉さん。33歳で、プログラミングを学び始め、4ヶ月という短い期間でフリーランスエンジニアとして独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


Pythonを最短で習得したい方へ
元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Pythonを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」
このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、AI(人工知能)や機械学習、IoTについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Pythonならではの学習方法や、現役Pythonエンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta_bannar-ai2

非常識な結果を出した卒業生

活躍する現役エンジニア

人気記事セレクション

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]