Pythonでコマンドライン引数を取得する

Pythonでコマンドライン引数を取得する

記事の文字数:1732

Pythonでコマンドライン引数を取得する場合は、sysモジュールのargvを参照します。インデックスの1つ目がPythonファイル名で、2つ目以降からコマンドライン引数を参照することができます。入力チェックをする場合はargparseパッケージを利用することで簡単に実装することができます。


スポンサーリンク

Pythonでコマンドライン引数を取得する場合は、sysモジュールのargvを参照します。
インデックスの1つ目がPythonファイル名で、2つ目以降からコマンドライン引数を参照することができます。
また、argparseモジュールを使うと入力チェック処理を実装することもできます。

動作環境

Python 3.12.7

コマンドライン引数の使い方(sys.argv)

コマンドライン引数とは、スクリプトを実行するときに外部から渡す値のことです。
Pythonでは、これらの引数をsys.argvを使って取得できます。

コマンドライン引数を渡す

引数を指定してPythonコードを実行する場合は、以下のように指定します。

構文

python [ファイル名].py [引数1] [引数2] [引数3]…

実行例

例えば、ターミナルやコマンドプロンプトで以下のようにPythonスクリプトを実行すると、argv-test.pyapple,banana,orange という引数が渡されます。

python argv-test.py apple banana orange

コマンドライン引数を受け取る

Pythonではargv[0]がargv-test.pyで、argv[1]以降がコマンドライン引数となります。

引数のインデックス

python argv-test.py apple banana orangeを実行した場合、引数とインデックスの紐づきは以下の通りとなります。

インデックス内容備考
0argv-test.py実行ファイル名
1apple第一引数
2banana第二引数
3orange第三引数

sys.argv[インデックス]で値を受け取ります。

コードサンプル

Pythonのsysモジュールに含まれるargvを使用し、コマンドライン引数をリストとして取得するサンプルコードです。

argv-test.py
import sys
# 引数のリストを取得
args = sys.argv
# スクリプト名を取得
script_name = args[0]
# 実際の引数(スクリプト名以降)を取得
parameters = args[1:]
print(f"スクリプト名: {script_name}")
print(f"引数: {parameters}")

実行例

以下サンプルコードの実行コマンドです。

実行コマンド
python argv-test.py apple banana orange

コマンドを実行すると次のような出力が得られます。

実行結果
スクリプト名: argv-test.py
引数: ['apple', 'banana', 'orange']

引数の数をチェックする

ユーザーが引数を正しく渡しているかをチェックすることは重要です。
以下のように、引数の数を確認することでエラーハンドリングが可能です。

argv-test2.py
import sys
if len(sys.argv) < 2:
print("エラー: 少なくとも1つの引数を指定してください。")
sys.exit(1)
print(f"入力された引数: {sys.argv[1:]}")

実行結果例

以下のように引数が足りないエラーメッセージが表示されました。

実行結果例
$ python argv-test2.py
エラー: 少なくとも1つの引数を指定してください。

argparseで入力チェックを実装

argparseモジュールを使うと、入力チェックを含めた実装が簡単にできます。

実装例

以下サンプルのソースコードになります。

argv-test.py
import argparse
# インスタンス作成
parser = argparse.ArgumentParser(
prog="サンプルプログラム",
usage="python argv-test.py <user_name:str> <password:str> <age:int>",
description="引数のチェックを行うプログラムです。",
epilog="以上",
add_help=True,
)
# 引数を設定する
parser.add_argument("user_name", type=str, help="ユーザ名")
parser.add_argument("password", type=str, help="パスワード")
parser.add_argument("age", type=int, help="年齢")
# 引数を解析する
args = parser.parse_args()
# argsから設定値を取得して、表示する。
print(f"ユーザ名: {args.user_name}")
print(f"パスワード: {args.password}")
print(f"年齢: {args.age}")

argparse.ArgumentParserのインスタンス引数は以下のように指定します。

引数説明設定例
progプログラム名を指定する。サンプルプログラム
usageプログラムの使用方法を記載する。python argv-test.py <user_name> <password> <age>
descriptionプログラムの説明文を記載する。引数のチェックを行うプログラムです。
epilogヘルプの最後に表示する文字列。以上
add_help-h/–-helpオプションの追加True or False

ヘルプ表示方法

-hまたは--helpを指定することで、ヘルプを表示することができます。(add_helpがTrueの場合)

ヘルプ表示
$ python argv-test.py -h
usage: python argv-test.py <user_name:str> <password:str> <age:int>
引数のチェックを行うプログラムです。
positional arguments:
user_name ユーザ名
password パスワード
age 年齢
options:
-h, --help show this help message and exit
以上

実行例(正常系)

テストプログラムの正常系の実行例です。

実行コマンド
python argv-test.py test_user password 21
実行結果
ユーザ名: test_user
パスワード: password
年齢: 21

実行例(異常系①)

年齢(第三引数)に文字列を指定した場合の挙動を確認しました。

実行コマンド
python argv-test.py test_user password aaa

年齢に数値を指定していないため、以下エラーメッセージが表示されました。

実行結果
usage: python argv-test.py <user_name:str> <password:str> <age:int>
サンプルプログラム: error: argument age: invalid int value: 'aaa'

実行結果例(異常系②)

年齢(第三引数)を指定しなかった場合の挙動を確認しました。

実行コマンド
python argv-test.py test_user password

年齢が必須である旨のエラーメッセージが表示されました。

実行結果
usage: python argv-test.py <user_name:str> <password:str> <age:int>
サンプルプログラム: error: the following arguments are required: age

まとめ

  • Pythonでコマンドライン引数を扱うには、sysモジュールのargvを利用する。
  • インデックス0は、実行ファイル名でインデックス1以降がコマンドライン引数となる。
  • 入力チェックや引数の指定方法を実装する場合は、argparseモジュールを利用すると便利。

以上で本記事の解説を終わります。
よいITライフを!
スポンサーリンク
Scroll to Top