はじめに
Pythonでコマンドライン引数を受け取るには、標準モジュールsysのargvを使う方法と、標準モジュールargparseを使う方法があります。それぞれの使い方について簡単にまとめてみました。
- 動作環境
- Python 3.11
sys.argv
sys.argvを使う場合、コマンドライン引数が文字列のリストとして sys.argvに渡されます。sys.argv[0]
が実行されたpyファイルのファイル名です。
sys.argvを出力してみます。
import sys
print(sys.argv)
$ python3 main.py arg1 arg2
['main.py', 'arg1', 'arg2']
引数が足りない場合はIndexError
が発生します。
import sys
print(sys.argv[1])
$ python3 main.py
IndexError: list index out of range
そのため、エラーメッセージやhelpメッセージを表示したい場合は、自分で実装する必要があります。
import sys
if len(sys.argv) == 3:
file_name = sys.argv[1]
password = sys.argv[2]
print(f"File name: {file_name}, Password: {password}")
else:
print("Usage: python main.py <file_name> <password>")
argparse
argparseモジュールを使うと、helpメッセージなどを表示してくれるので、より柔軟で分かりやすく記述することができます。
import argparse
# argparse.ArgumentParserクラスをインスタンス化して、説明等を引数として渡す
parser = argparse.ArgumentParser(
prog="sample", # プログラム名
usage="python main.py <file_name> <password>", # プログラムの利用方法
description="sample script.", # ヘルプの前に表示
epilog="end", # ヘルプの後に表示
add_help=True, # -h/–-helpオプションの追加
)
# 引数の設定
parser.add_argument("file_name", type=str, help="File name")
parser.add_argument("password", type=str, help="Password")
# 引数の解析
args = parser.parse_args()
print(f"File name: {args.file_name}, Password: {args.password}")
$ python3 main.py samplefile 123
File name: samplefile, Password: 123
引数が正しくないと、エラーメッセージ等が表示されます。
$ python3 main.py samplefile
usage: python main.py <file_name> <password>
sample: error: the following arguments are required: password
helpオプションが設定されている場合、-h
(--help)オプションを指定すると、helpメッセージが表示されます。
$ python3 main.py -h
usage: python main.py <file_name> <password>
sample script.
positional arguments:
file_name File name
password Password
options:
-h, --help show this help message and exit
end
また、位置引数かオプション引数かも指定できます。オプション引数には接頭辞-
か--
を付ける必要があり、実行時に引数を指定する場所はどこでも構いません。
# 引数の設定
parser.add_argument("-f", "--file", type=str, help="File name")
parser.add_argument("-p", "--passwd", type=str, help="Password")
# 引数の解析
args = parser.parse_args()
print(f"File name: {args.file}, Password: {args.passwd}")
$ python3 main.py -f samplefile -p 123
File name: samplefile, Password: 123
その他の使い方について公式ドキュメント等をご参照ください。
おわりに
今回はPython標準モジュールsysのargvとargparseを使ったコマンドライン引数の受け取り方について簡単にまとめてみました。詳しい使い方が気にある方がいらっしゃいましたら、公式ドキュメント等をご参照ください。