記事ディレクトリ
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))