Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでコマンドライン引数を追加する方法:argparseモジュールの使い方を解説

はじめに

Pythonには、コマンドライン引数を解析するための強力なargparseモジュールが標準で用意されています。OSのコマンドラインからユーザーの入力を受け取りたい場合や、URLを指定して解析させたり、S3バケットへアップロードするファイルを指定したりするなど、パラメータを受け付けるプログラムを作成したい場合に、argparseを使えば最小限の手間で実装できます。

基本的な使い方

argparseを使ったプログラムの流れは、以下の3ステップです。

  • プログラムが受け付ける引数を定義する

  • パーサーを呼び出して、結果オブジェクトを取得する

  • 取得した引数を使用する

まとめると、引数パーサーを使ったプログラムの構造は次のようになります。

def main(parameters):
    << ここにロジックを記述 >>

if __name__ == '__main__':
    << 1. 引数パーサーを定義 >>
    << 2. 引数を解析 >>
    << 3. バリデーション >>
    << 4. main(parameters) を呼び出す >>

__name__ == '__main__' のセクションは、スクリプトが直接実行された場合にのみ処理されるため、ここがプログラムのエントリーポイントとなります。

例1:引数を1つだけ受け取るプログラム

まずは、テニス選手名(文字列)という1つの引数だけを受け取るプログラムを作成してみましょう。

import argparse

def get_args():
    """ Function : get_args
    .add_argument で使用するパラメータ
    1. metavar - ユーザーに対してデータ型のヒントを提供する。
       - デフォルトでは、すべての引数は文字列として扱われる。

    2. type - 実際のPythonデータ型
       - (str の前後に引用符がない点に注意)

    3. help - 使用方法に関するパラメータの簡単な説明
    """

    parser = argparse.ArgumentParser(
        description='位置引数2つの例',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    # 最初の引数として文字列型のプレイヤー名を追加
    parser.add_argument('player',
                        metavar='player',
                        type=str,
                        help='テニスプレイヤー')

    return parser.parse_args()

# main関数を定義
def main(player):
    print(f" *** {player} はグランドスラムで20勝しています。")

if __name__ == '__main__':
    args = get_args()
    main(args.player)

a) このプログラムをコマンドラインから引数なしで実行すると、プログラムの正しい使い方を示す簡単な使用方法(usage)が出力されます。

In [3]: run <>.ipynb
usage: ipython [-h] player
ipython: error: the following arguments are required: player
An exception has occurred, use %tb to see the full traceback.

b) 引数を2つ以上渡した場合もエラーになります。定義されていない第2引数を受け取ったことに対して、プログラムが警告を出します。

c) 引数がちょうど1つ渡された場合のみ、プログラムは正常に実行されます。

例2:引数を2つ受け取るプログラム

次に、テニス選手名(文字列)と、その選手が獲得したグランドスラムタイトル数(整数)という2つの引数を受け取るプログラムを作成します。

import argparse

def get_args():
    """ Function : get_args
    .add_argument で使用するパラメータ
    1. metavar - ユーザーに対してデータ型のヒントを提供する。
       - デフォルトでは、すべての引数は文字列として扱われる。

    2. type - 実際のPythonデータ型
       - (str の前後に引用符がない点に注意)

    3. help - 使用方法に関するパラメータの簡単な説明
    """

    parser = argparse.ArgumentParser(
        description='位置引数2つの例',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    # 最初の引数として文字列型のプレイヤー名を追加
    parser.add_argument('player',
                        metavar='player',
                        type=str,
                        help='テニスプレイヤー')

    # 2番目の引数として整数型のタイトル数を追加
    parser.add_argument('titles',
                        metavar='titles',
                        type=int,
                        help='テニスプレイヤーのグランドスラムタイトル数')

    return parser.parse_args()

# main関数を定義
def main(player, titles):
    print(f" *** {player} はグランドスラムで{titles}勝しています。")

if __name__ == '__main__':
    args = get_args()
    main(args.player, args.titles)

ターミナルを開いてこのプログラムを実行してみましょう。引数が渡されなかった場合、スクリプトは明確なエラーメッセージとともに例外を返します。

実行結果

<<< python test.py
usage: test.py [-h] player titles
test.py: error: the following arguments are required: player, titles

<<< python test.py federer 20
*** federer はグランドスラムで20勝しています。

このように、argparseモジュールを活用すれば、引数の不足や型の不一致といった入力ミスを自動的に検出し、ユーザーにわかりやすいエラーメッセージを表示できるため、堅牢なコマンドラインツールを簡単に開発できます。

  1. Windowsターミナルでカスタムコマンドラインを追加する方法

    Windows Terminalは、コマンドラインベースのさまざまなユーティリティを1つのUWPシェルに統合することを目指しています。初期状態ではWindows PowerShellとWindowsコマンドプロンプトが含まれていますが、設定を変更すれば、それ以外のコマンドラインツールも自由に追加できます。たとえば、Git Bash、WSL(Windows Subsystem for Linux)のコマンドライン、Anacondaのコマンドラインなどを登録することが可能です。 Windows Terminalにカスタムコマンドラインを追加する手順 カスタムコマンドラインを追加するには、Wind

  2. Pythonにパスを追加する方法|Windowsの環境変数設定でエラーを解消する手順

    Pythonとは? Pythonは1991年に初めてリリースされたプログラミング言語です。WindowsやmacOS、Linuxなど複数のOSで動作し、開発者はさまざまな用途のコードを記述・開発できます。Web開発、データ分析、AI・機械学習など幅広い分野で活用されており、その柔軟性と充実したサポート体制から、世界で最も広く使われているプログラミング言語のひとつとなっています。 コマンドプロンプトでpythonが認識されない原因 コマンドプロンプトで「python」と入力してもエラーが返され、正しく動作させるには毎回フルパスを指定しなければならないことがあります。これは、コマンドプロンプトが