argparseモジュールの詳しい説明

1. argparse モジュールの概要

argparseは、コマンドライン引数を解析するための Python ライブラリであり、Python 標準ライブラリの一部です。Python 2.7 に基づく stdlib コード。

argparseモジュールを使用すると、使いやすいコマンドライン インターフェイスを簡単に作成できます。プログラムは必要な引数を定義し、 argparse はsys.argv (コマンド ライン)からそれらの引数を解析する方法を判断しますargparseモジュールは、ヘルプと使用法メッセージも自動的に生成し、ユーザーが無効な引数をプログラムに指定した場合にエラーを生成します。

2. argparseを使用しない例

一般に、ターミナル コマンドは使用されませんが、変数の割り当てが必要な一部のプログラムでは、次のことがよく行われます。

  • 1. プログラム (または設定ファイル) に直接ハードを記述します。
  • 2. または、input を使用してコマンド ラインに複数回入力することで、操作のデバッグと変更を複数回行うのが難しくなります。次に例を示します。
import math

def cal_vol(radius,height):
    vol = math.pi * pow(radius,2) * height
    return vol

if __name__=='__main__':
    print(cal_vol(2,4))

引数解析

3. argparseを使用した例

3.1 argparse の簡単な例

argparse を使用する主な手順は次のとおりです。

  • argparseパッケージをインポートします
  • ArgumentParser()パラメータ オブジェクトを作成します
  • add_argument()メソッドを呼び出してパラメータ オブジェクトにパラメータを追加します。
  • parse_args()を使用して追加されたパラメータのパラメータ オブジェクトを解析し、解析オブジェクトを取得します。プログラムの他の部分でコマンド ライン パラメータを使用する必要がある場合は、解析オブジェクト.パラメータを使用して取得します。

簡単な例を次に示します。

import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('radius', type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('height', type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args

# 计算圆柱体积
def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

注: 現時点では指定されていないため、コマンド ライン パラメータはデフォルトで順番に割り当てられ、順序が異なると結果も異なります。
ここに画像の説明を挿入ここに画像の説明を挿入

デフォルトのコマンド -h は、パラメータを追加するときに設定されたヘルプ情報を取得できます。
ここに画像の説明を挿入

  • コマンド ライン パラメーターの入力はデフォルトで順番に割り当てられ、順序が異なると結果も異なります。
  • デフォルトのコマンド -h は、パラメータを追加するときに設定されたヘルプ情報を取得できます。

3.2 argparse の高度な例

add_argument()メソッド (コマンド ライン パラメーターの解析方法を定義):
ここに画像の説明を挿入
パラメーターは次のように説明されます。

  • 名前またはフラグ - オプション文字列の名前またはリスト (foo または -f、--foo など)。

  • action - コマンドラインがパラメータに遭遇したときのアクション。デフォルト値はstoreです。

    • – store_const、割り当てが const であることを示します。
    • – 追加、検出された値をリストとして保存します。つまり、パラメーターが繰り返される場合、複数の値が保存されます。
    • – append_const。パラメータ仕様で定義された値をリストに保存します。
    • – count、遭遇数を保存します。さらに、argparse.Action を継承してパラメータ解析をカスタマイズすることもできます。
  • nargs - 読み取る必要があるコマンドライン引数の数。

    • 特定の数値または ? 数値。値が指定されていない場合は、位置引数にデフォルトを使用し、オプション引数に const を使用します。
    • または * 記号は 0 個以上のパラメータを示します。
    • または、+ 記号は 1 つ以上のパラメータを意味します。
  • const - action と nargs に必要な定数値。

  • デフォルト - パラメータが指定されていない場合のデフォルト値。

  • type - コマンドライン引数の変換先のタイプ。デフォルトは文字列型です。

  • 選択肢 - パラメーターに許可される値のコンテナー。

  • required - オプションのパラメータを省略できるかどうか (オプションのパラメータのみ)。

  • help - パラメータのヘルプ情報。 argparse.SUPPRESS として指定すると、パラメータのヘルプ情報が表示されないことを意味します。

  • metavar - 使用法の説明内のパラメータの名前。デフォルトは、必須パラメータのパラメータ名、およびオプションのパラメータのすべて大文字のパラメータ名です。

  • dest - 解析されたパラメータ名。デフォルトではオプションのパラメータとして最長の名前が選択され、ダッシュはアンダースコアに変換されます。

3.2.1 オプションのパラメータ設定
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

パラメーター名の前に- -を追加すると、オプションのパラメーターとして設定されます。入力しない場合は、次の例に示すように、デフォルト値が使用されます (デフォルトが設定されていない場合、デフォルト値は None になります)。
ここに画像の説明を挿入

3.2.2 オプションのパラメータ参照名
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

オプションのパラメーターを参照名に設定すると、パラメーター名を短縮でき、コマンド ライン パラメーターの入力が簡素化されます。
ここに画像の説明を挿入

次のように: -r- -radius の両方が使用可能です
ここに画像の説明を挿入
ここに画像の説明を挿入

3.2.3 ヘルプのパラメータ名情報をクリアする
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

以下に、3.2.2 の -h で表示される情報と比較して、パラメータ名を削除した理由は、
ここに画像の説明を挿入Metavar
-h によって使用法の説明にパラメータ名を表示します。
必須パラメータの場合、デフォルトはパラメータ名です。オプションのパラメータの場合、デフォルトはすべて大文字のパラメータです。空に設定するとここには表示されません。

3.2.4 必須パラメータ設定
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

required=Trueが設定されている場合は、パラメータがオプションであるかどうかに関係なく、次の例に示すように入力する必要があります。
ここに画像の説明を挿入

3.2.5 リストパラメータ(マルチパラメータ)の入力設定
import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-n', '--num', type=int, nargs='+', metavar='', required=True, help='a string of nums')
    args = parse.parse_args()
    return args


if __name__ == '__main__':
    args = parse_args()
    print(args.num)
    for i in list(args.num):
        print(i)


引数解析

3.2.6 相互に排他的なパラメータの使用
import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    group = parse.add_mutually_exclusive_group()  # 1、在参数对象中添加互斥组
    group.add_argument('-b', '--brief', action='store_true', help='print brief message')  # 2、在互斥组中添加参数(store_true默认当命令行未输入参数则为False,否则为True)
    group.add_argument('-v', '--verbose', action='store_true', help='print verbose message')
    args = parse.parse_args()
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    volume = cal_vol(args.radius, args.height)
    if args.brief:
        print(volume)
    elif args.verbose:
        print('Volume of Cylinder with radius %s and height %s is %s' % (args.radius,args.height,volume))
    else:
        print('Volume of Cylinder is %s' % (volume))

コマンドラインでは、b と v は 2 つのパラメータのうち 1 つだけを入力できます。
ここに画像の説明を挿入

3.2.7 デフォルトのパラメータ設定

set_defaults() は一部のパラメータのデフォルト値を設定できます

import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.set_defaults(height=4)
    args = parse.parse_args()
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))

ここに画像の説明を挿入

4. 参考文献

おすすめ

転載: blog.csdn.net/craftsman2020/article/details/129237425