はじめに
Pythonを使ってコマンドラインツールを作成する際には、argparseモジュールが非常に有用です。
このモジュールを利用することで、簡単にコマンドライン引数を処理することができます。
今回は、Pythonのargparseモジュールの使い方と10のサンプルコードを初心者向けに解説します。
●argparseとは
argparseモジュールは、Python標準ライブラリの一部で、コマンドライン引数のパース(解析)を行うためのものです。
引数の名前、データ型、ヘルプメッセージなどを定義し、ユーザーからの入力を適切に処理するためのインターフェースを提供します。
○argparseの基本
argparseを使用するためには、まずargparse.ArgumentParser()オブジェクトを作成します。
その後、このオブジェクトのadd_argument()メソッドを使って、コマンドライン引数を定義します
定義した引数は、parse_args()メソッドを呼び出すことで取得できます。
●argparseの使い方
○サンプルコード1:基本的な引数の定義と取得
ここでは、argparseを使って基本的な引数の定義と取得をするコードを紹介しています。
この例では、”num”という名前の引数を定義して、ユーザーからの入力を取得しています。
このコードを実行すると、コマンドラインから”num”という引数の値を取得し、その値を画面に表示します。
例えば、コマンドラインに”10″を入力すると、”10″という文字列が出力されます。
○サンプルコード2:引数の型指定
次に、引数の型を指定する方法を説明します。
argparseでは、add_argument()メソッドの”type”引数を使って、引数の型を指定できます。
下記のコードでは、整数型の引数を定義しています。
このコードでは、”num”という引数は整数型として処理されます。
したがって、”10″というコマンドライン引数を入力すると、出力は整数の10となります。
○サンプルコード3:必須とオプションの引数
argparseでは、必須の引数とオプションの引数を定義することができます。
下記のコードでは、必須の引数”num”と、オプションの引数”opt”を定義しています。
このコードを実行すると、”num”引数は必須で、”opt”引数はオプションです。
“opt”引数が与えられない場合、その値はデフォルト値として”default”が用いられます。
○サンプルコード4:引数のデフォルト値
次に、引数のデフォルト値の指定方法を紹介します。
argparseでは、add_argument()メソッドの”default”引数を使って、引数のデフォルト値を指定できます。
このコードでは、”num”という引数のデフォルト値を0に設定しています。
したがって、コマンドラインから”num”引数が与えられない場合、その値は0となります。
○サンプルコード5:引数のヘルプメッセージ
argparseでは、引数に対するヘルプメッセージを指定することができます。
このメッセージは、ユーザーがコマンドラインで”–help”オプションを指定したときに表示されます。
上記のコードでは、”num”引数に対するヘルプメッセージを”input an integer”と定義しています。
このメッセージは、ユーザーが”–help”オプションを指定したときに表示されます。
●argparseの応用例
引数の定義と取得の基本的な方法を見てきましたが、argparseにはさらに高度な機能もあります。
ここでは、その応用例としてサブコマンドの定義や引数の選択肢の制限などを見ていきましょう。
○サンプルコード6:サブコマンドの定義
argparseでは、コマンドライン引数としてサブコマンドを定義することが可能です。
下記のコードでは、”command”というサブコマンドを定義し、それぞれに引数を設定しています。
このコードを実行すると、”a”と”b”という2つのサブコマンドが利用可能になります。
それぞれのサブコマンドには、異なる引数を指定することができます。
○サンプルコード7:引数の選択肢を限定
argparseでは、引数の選択肢を制限することも可能です。
下記のコードでは、”choice”という引数の選択肢を”a”, “b”, “c”の3つに制限しています。
このコードでは、コマンドラインから”choice”引数に”a”, “b”, “c”以外の値が入力されるとエラーが発生します。
○サンプルコード8:引数のエイリアス
argparseでは、引数に別名(エイリアス)を付けることも可能です。
下記のコードでは、”num”という引数に対して”n”というエイリアスを設定しています。
このコードでは、コマンドラインから”–num”もしくは”-n”と入力することで、同じ引数を指定することができます。
○サンプルコード9:設定ファイルから引数を読み込む
argparseを使って、設定ファイルから引数を読み込むことも可能です。
下記のコードでは、”config”という引数を定義し、その値として設定ファイルのパスを受け取ります。
このコードでは、”–config”引数で指定された設定ファイルを開き、その内容をjson形式として読み込んでいます。
○サンプルコード10:独自の引数型を定義
argparseでは、独自の引数型を定義することも可能です。
下記のコードでは、”odd”という奇数のみを受け取る独自の引数型を定義しています。
このコードでは、”num”引数が偶数である場合、エラーを発生させるようにしています。
●注意点と対処法
argparseを使用する際には、いくつかの注意点があります。
まず一つ目は、argparseはコマンドライン引数をパースするため、同じスクリプトを異なる引数で複数回実行する場合、それぞれの実行で引数が正しく反映されるように注意が必要です。
二つ目の注意点は、argparseはエラーハンドリングを自動で行います。
つまり、不適切な引数が指定された場合、エラーメッセージを表示してプログラムを終了します。
これは便利な機能ですが、特定のエラー処理を自分で書きたい場合には不都合な場合もあります。
その場合には、argparse.ArgumentParserのerrorメソッドをオーバーライドすることで、独自のエラーハンドリングを行うことができます。
●カスタマイズ方法
argparseは非常に柔軟性が高く、様々なカスタマイズが可能です。
例えば、ヘルプメッセージの書式を変更したい場合、argparse.ArgumentParserのformatter_class引数を使用して指定できます。
また、引数のエラーチェックを独自に行いたい場合、add_argumentメソッドのtype引数に独自関数を指定することで、任意のチェックを行うことができます。
まとめ
以上、Pythonのargparseモジュールの使い方とサンプルコードを解説しました。
argparseはコマンドラインツールを作成する際に非常に便利なモジュールです。
基本的な使い方から高度な使い方まで学べば、さまざまな状況に対応することが可能になります。
今回学んだ知識を活かして、自分自身のコマンドラインツールを作成してみてください。