Pythonでもコマンドライン引数を取得できます。
ただし、C言語のようにmain関数の引数を
int main(int argc, char *argv[]){}
とするような記述(緑文字部分)は必要ありません。
結論から言うと、
import sys
を先頭でインポートして、
argv = sys.argv
で変数argvに配列形式の文字列として取り出せます。
Pythonでコマンドライン引数を取得するサンプルコード
単純な例で示します。
コマンドラインから
python getCommandLine.py Hello 123
として実行したとき(getCommandLine.pyはPythonスクリプト名です)、引数として指定したgetCommandLine.pyとHello、123の文字列をそれぞれ取り出す場合、次のように記述できます。
getCommandLine.py
import sys
# コマンドライン引数を取得
argv = sys.argv
# 取得したコマンドライン引数を表示
print(argv[0]);
print(argv[1]);
print(argv[2]);
実行後のイメージ
python getCommandLine.py Hello 123 として実行した場合
getCommandLine.py
Hello
123
注意する点は、取得した配列変数の添え字0番目には、スクリプト名本体が入ることです。
イメージで表すとこうなります。
上記スクリプトの場合、printで3つの引数文字列を表示させようとしているため、引数の数が少なかったりするとエラーになります。
例えば、python getCommandLine.py Hello として実行してしまうと
getCommandLine.py
Hello
Traceback (most recent call last):
File "getCommandLine.py", line 9, in <module>
print(argv[2]);
IndexError: list index out of range
とエラーメッセージが表示されます。
argvの添え字の2は、配列の範囲内にないよ、と言われてしまいます。この実行例の場合、argv[2]は存在しないためです。
配列の中身を全て参照するfor ~ in を使って、sys.argvで取得した配列文字列を全て表示させるようにすると先ほどのスクリプトはスマートかもしれません。
getCommandLine2.py
import sys
# コマンドライン引数を取得
argv = sys.argv
# 取得したコマンドライン引数文字列を全て表示
for value in argv:
print(value)
コマンドライン引数に指定した要素数を取得する
場合によっては、コマンドライン引数の数(コマンドライン引数にいくつの要素が指定されているか)を判断したいときがあります。
len関数を使えば、コマンドライン引数の要素数を得ることができます。
サンプルを示します。
getCommandLine3.py
import sys
# コマンドライン引数を取得
argv = sys.argv
# コマンドライン引数の要素数を取得
argc = len(argv)
print("コマンドライン引数の数: " + str(argc))
# 取得したコマンドライン引数文字列を全て表示
for i in range(argc):
print(argv[i])
実行後のイメージ
python getCommandLine2.py Hello 123 として実行した場合
コマンドライン引数の数: 3 getCommandLine3.py Hello 123
コメント