【Python】argparseモジュールの詳細説明

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

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

円柱の体積計算の簡単な実装

argparse コマンド ライン パラメーター解析モジュールを理解しやすくするために、簡単なプログラムから始めます。

import math


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


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

PyCharm を通じてコードを実行すると、結果が表示されます。

ここに画像の説明を挿入

コマンドラインからコードを実行すると、結果が表示されます。

ここに画像の説明を挿入

コマンドライン方式を使用する場合は、実行する xxx.py ファイルが配置されているファイル ディレクトリに移動し、「python xxx.py」と入力する必要があることがわかります。

argparse モジュールを使用して円柱の体積を計算する

  1. argparseモジュールをインポートする

    import argparse
    
  2. 解析オブジェクトパーサーを作成する

    parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
    

    このうちパーサ解析オブジェクトはパラメータをロードするためのコンテナに相当し、解析オブジェクトを記述するためにdescriptionが使用されます。

  3. コマンドライン引数を追加する

    parser.add_argument('radius', type=int, help='Radius of Cylinder')
    parser.add_argument('height', type=int, help='Height of Cylinder')
    args = parser.parse_args()
    

    円柱の体積を計算する例では、必要なパラメータは半径と高さなので、この2つのパラメータを解析オブジェクトに追加する必要があります。パラメータの型はint型として定義されており、ヘルプを使用して説明します。パラメータです。

  4. 元の関数の引数をコマンドライン引数に置き換えます

    print(cylinder_volume(args.radius, args.height))
    
  5. 完全なコード再現

    import math
    import argparse
    
    parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
    parser.add_argument('radius', type=int, help='Radius of Cylinder')
    parser.add_argument('height', type=int, help='Height of Cylinder')
    args = parser.parse_args()
    
    
    def cylinder_volume(radius, height):
        vol = (math.pi) * (radius ** 2) * height
        return vol
    
    
    if __name__ == '__main__':
        print(cylinder_volume(args.radius, args.height))
    
  6. コードを実行する

    PyCharm でコードを直接実行すると、結果は次のようになります。

ここに画像の説明を挿入

このコードはパラメータを渡す必要があるため、PyCharm はエラーを直接報告します。

コマンドラインからコードを実行すると、結果は次のようになります。

ここに画像の説明を挿入

結果は以前と同じであることがわかります。

次に、 --help または -h パラメータを呼び出して、プログラムの説明を表示します。

ここに画像の説明を挿入

ここで、以前に渡されたパラメータの順序を変更しようとしました。結果は次のようになります。

ここに画像の説明を挿入

結果がまったく異なることがわかります。ヘルプのプロンプト情報から、渡されたパラメーターは厳密な順序で実行する必要があることがわかります。しかし、日常生活では、多数のパラメーターが関係する可能性があります。パラメータの順序があまり良くありません。メモリ、この時点で、元のコードを変更して、オプションのパラメータを使用できるようにすることができます。

parser.add_argument('-r', '--radius', type=int, help='Radius of Cylinder')
parser.add_argument('-H', '--height', type=int, help='Height of Cylinder')

ここで、「-h」パラメータは help コマンドによって占有されているため、高さには「-H」を使用することに注意してください。

コードを再度実行した場合の表示結果は次のとおりです。

ここに画像の説明を挿入

ここで、「-h」を渡してプログラムの説明を表示します。
ここに画像の説明を挿入

上記の説明をより簡潔にしたい場合は、コードを変更できます。

parser.add_argument('-r', '--radius', type=int, metavar='', help='Radius of Cylinder')
parser.add_argument('-H', '--height', type=int, metavar='', help='Height of Cylinder')

ここで、再度「-h」を渡して効果を確認します。

ここに画像の説明を挿入

それでは、パラメータを 1 つだけ入力した場合、結果はどうなるでしょうか?

ここに画像の説明を挿入

エラー メッセージでは、特定の値を指定しないパラメーターには値 None が割り当てられることがわかります。この状況を回避するには、コードを次のように変更します。

parser.add_argument('-r', '--radius', type=int, metavar='', required=True, help='Radius of Cylinder')
parser.add_argument('-H', '--height', type=int, metavar='', required=True, help='Height of Cylinder')

もう一度やってみましょう:

ここに画像の説明を挿入

この時点で、追加する必要があるパラメータの入力を求めるプロンプトが表示されることがわかります。

相互排他パラメータの概要

次に、ミューテックス グループを追加してみます。

group = parser.add_mutually_exclusive_group()
group.add_argument('-q', '--quiet', action='store_true', help='print quiet')
group.add_argument('-v', '--verbose', action='store_true', help='print verbose')

まずグループ コンテナを作成し、それにパラメータを追加します。アクション パラメータを 'store_true' に割り当てることは、コマンドに '-q' または '--quit' ('-v' または '--verbose') を追加することを意味します。を指定すると、プログラムは args.quit に true を割り当てます。デフォルトでは false です。次に、この原則を使用して、main 関数の内容を変更できます。

volume = cylinder_volume(args.radius, args.height)
    if args.quiet:
        print("quiet: %s" % volume)
    elif args.verbose:
        print("verbose: %s" % volume)
    else:
        print("Volume of a Cylinder with radius %s and height %s is %s" % (args.radius, args.height, volume))

次に、コマンド ライン テストを実行して効果を確認します。

ここに画像の説明を挿入
なお、相互排除の意味は、相互排他グループに同時に含めることができないパラメータ、つまり 1 つのパラメータのみを設定できることを指します。を渡すと、次のエラー メッセージが表示されます。

ここに画像の説明を挿入

フルバージョンの改良されたコード

import math
import argparse

parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
parser.add_argument('-r', '--radius', type=int, metavar='', required=True, help='Radius of Cylinder')
parser.add_argument('-H', '--height', type=int, metavar='', required=True, help='Height of Cylinder')
group = parser.add_mutually_exclusive_group()
group.add_argument('-q', '--quiet', action='store_true', help='print quiet')
group.add_argument('-v', '--verbose', action='store_true', help='print verbose')
args = parser.parse_args()


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


if __name__ == '__main__':
    volume = cylinder_volume(args.radius, args.height)
    if args.quiet:
        print("quiet: %s" % volume)
    elif args.verbose:
        print("verbose: %s" % volume)
    else:
        print("Volume of a Cylinder with radius %s and height %s is %s" % (args.radius, args.height, volume))

おすすめ

転載: blog.csdn.net/zzy_NIC/article/details/119821493