【Python入門】コマンドライン引数の取得

 ここでは、Python の標準ライブラリ sys モジュールを用いて、コマンドラインから渡される引数の取得方法について解説します。コマンドライン引数は、プログラム実行時にプログラム名に続けて指定するデータであり、実行環境(コマンドプロンプト、ターミナル、Anaconda プロンプトなど)からプログラムに情報を渡す際に活用されます。以下では、sys.argv を中心に、コマンドライン引数の基本的な使い方や、引数を数値に変換して処理する方法について、段階を追って詳しく説明していきます。

1.コマンドライン引数の基本

1.1. sys.argv の概要

 Python では、sys モジュールの argv 属性を利用することで、コマンドラインから渡された引数をリスト形式で取得できます。リストの先頭(インデックス 0)には実行したプログラムのファイル名が格納され、以降の要素が実際に渡された引数となります。以下の表は、sys.argv の内容についてまとめたものです。

インデックス内容
0実行した Python プログラムの名前
1 以降コマンドラインで指定された引数

例えば、プログラムを以下のように実行した場合

> python my_script.py apple banana cherry

sys.argv の内容は、

['my_script.py', 'apple', 'banana', 'cherry']

となります。

1.2. 基本的な使用例

 まず、sys.argv をそのまま表示するプログラムの例を示します。以下のコードは、プログラム名と全ての引数をリスト形式で出力します。

import sys

# sys.argv をそのまま表示する
print("コマンドライン引数のリスト:", sys.argv)

このプログラムを "argv_example.py" という名前で保存し、例えば次のように実行すると、

> python argv_example.py 10 20 30

実行結果は以下のようになります。

コマンドライン引数のリスト: ['argv_example.py', '10', '20', '30']

また、プログラム内で引数の個数を確認するには、len 関数を利用します。たとえば、

import sys

# 引数の個数を取得(プログラム名も含む)
arg_count = len(sys.argv)
print("引数の総数:", arg_count)

 この例では、プログラム名も含めた総数が出力されるため、実際に渡された引数の個数を知りたい場合は、sys.argv[1:] を利用してスライスすることが一般的です。

2.コマンドライン引数の活用例

2.1. 数値の計算への応用

 コマンドライン引数はすべて文字列として扱われるため、数値として計算を行いたい場合は、型変換が必要です。次の例では、プログラム名以降の引数を整数に変換し、全ての数値の合計を求めます。

import sys

# プログラム名以降の引数を整数に変換し、その合計を求める
# sys.argv[1:] でプログラム名以外の引数を取り出す
total = sum(map(int, sys.argv[1:]))
print("渡された数値の合計:", total)

このプログラムを "sum_args.py" として保存し、例えば次のように実行すると、

> python sum_args.py 5 15 10

出力は

渡された数値の合計: 30

 となります。ここでは、map 関数を用いて各引数に int 関数を適用し、sum 関数で合計を計算しています。

2.2. コマンドライン引数の利用シーン

 コマンドライン引数を活用することで、プログラム実行時に柔軟にパラメータを変更できるため、例えば以下のような用途に役立ちます。

  • ユーザーが入力した数値や文字列をもとに、動的に計算や処理を行う。
  • プログラムの動作モードや設定を引数で指定する(例:デバッグモードのオン/オフ)。
  • 複数のファイル名やパスを渡して、バッチ処理を行う。

まとめ

 ここでは、sys モジュールの argv 属性を利用したコマンドライン引数の取得方法について解説しました。sys.argv を用いることで、実行したプログラム名と共に、引数が文字列のリストとして取得できる仕組みを理解しました。また、引数の数を確認したり、数値に変換して計算する方法を示すことで、コマンドライン引数の実用的な活用例についても説明しました。これらの基本操作を応用することで、ユーザーからの入力を柔軟に受け取り、様々な用途に対応するツールやスクリプトの作成が可能となります。