Python のコマンドライン引数

Manav Narula 2023年1月30日
  1. Python で sys モジュールを使用してコマンドライン引数を処理する
  2. Python で getopt モジュールを使用してコマンドライン引数を処理する
  3. Python で argparse モジュールを使用してコマンドライン引数を処理する
Python のコマンドライン引数

コマンドライン引数は、ファイルの実行中にコマンドラインウィンドウで指定される値です。プログラムの実行中に値を渡すことができるため、これらは順応性があります。

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 Narula
Manav Narula avatar Manav Narula avatar

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