
スポンサーリンク
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.py
に apple,banana,orange
という引数が渡されます。
python argv-test.py apple banana orange
コマンドライン引数を受け取る
Pythonではargv[0]がargv-test.py
で、argv[1]以降がコマンドライン引数
となります。
引数のインデックス
python argv-test.py apple banana orange
を実行した場合、引数とインデックスの紐づきは以下の通りとなります。
インデックス | 内容 | 備考 |
---|---|---|
0 | argv-test.py | 実行ファイル名 |
1 | apple | 第一引数 |
2 | banana | 第二引数 |
3 | orange | 第三引数 |
sys.argv[インデックス]
で値を受け取ります。
コードサンプル
Pythonのsysモジュールに含まれるargvを使用し、コマンドライン引数をリストとして取得するサンプルコードです。
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']
引数の数をチェックする
ユーザーが引数を正しく渡しているかをチェックすることは重要です。
以下のように、引数の数を確認することでエラーハンドリングが可能です。
import sys
if len(sys.argv) < 2: print("エラー: 少なくとも1つの引数を指定してください。") sys.exit(1)
print(f"入力された引数: {sys.argv[1:]}")
実行結果例
以下のように引数が足りないエラーメッセージが表示されました。
$ python argv-test2.pyエラー: 少なくとも1つの引数を指定してください。
argparseで入力チェックを実装
argparseモジュールを使うと、入力チェックを含めた実装が簡単にできます。
実装例
以下サンプルのソースコードになります。
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 -husage: 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ライフを!