Python のコマンドライン引数
-
Python で
sys
モジュールを使用してコマンドライン引数を処理する -
Python で
getopt
モジュールを使用してコマンドライン引数を処理する -
Python で
argparse
モジュールを使用してコマンドライン引数を処理する
![Python のコマンドライン引数](/img/Python/ag-feature-image---command-line-arguments-python.webp)
コマンドライン引数は、ファイルの実行中にコマンドラインウィンドウで指定される値です。プログラムの実行中に値を渡すことができるため、これらは順応性があります。
Python では、コマンドライン引数の処理にさまざまなモジュールを使用できます。これについては以下で説明します。
Python で sys
モジュールを使用してコマンドライン引数を処理する
sys.argv()
は、コマンドラインで指定された引数をリストタイプの構造で格納するために使用されます。ファイルの名前が最初の引数と見なされます。
例えば、
import sys
print("Arguments without the script name ", (len(sys.argv) - 1))
print("Arguments given ")
for i in range(1, len(sys.argv)):
print(sys.argv[i])
上記の例では、実行時にいくつかの引数を渡し、引数の総数とその値を表示します。
Python で getopt
モジュールを使用してコマンドライン引数を処理する
getopt
モジュールは、コマンドライン引数も処理します。これにより、指定された値を検証できます。スクリプトが認識できるオプション文字列とともに、引数を使用して値を提供できます。このモジュールは sys モジュールと連携して、処理を改善します。
getopt()
コンストラクターは、引数を解析するオブジェクトを初期化するために使用されます。オプションが引数リストから認識されない場合、getopt.error
を返します。
以下のコードで使用します。
import getopt
import sys
lst = sys.argv[1:]
options = "abc:"
long_options = ["A_Message", "B_Message", "C_Message"]
try:
arguments, values = getopt.getopt(lst, options, long_options)
for currentArgument, currentValue in arguments:
if currentArgument in ("-a", "--A_Message"):
print("Message A received")
elif currentArgument in ("-b", "--B_Message"):
print("Message B received")
elif currentArgument in ("-c", "--C_Message"):
print("Message C received")
except getopt.error as err:
print("Error")
Python で argparse
モジュールを使用してコマンドライン引数を処理する
argparse モジュールは、コマンドライン引数を操作するのに最も便利なモジュールです。このモジュールは、位置引数、オプションの引数を処理し、それらのタイプを指定できるため、多くの柔軟性を提供します。
一部の引数が欠落している場合に備えて、いくつかのデフォルト値を設定し、ヘルプメッセージを表示することもできます。
ArgumentParser()
関数はパーサーオブジェクトを作成します。parse.args()
関数は、コマンドラインから引数を読み取ります。
例えば、
import argparse
parser = argparse.ArgumentParser(description="Which Message?")
parser.add_argument("a")
parser.add_argument("b")
args = parser.parse_args()
print(args.a, args.b)
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn