Python:コマンドラインから引数を取得して使う

Python

Pythonでもコマンドライン引数を取得できます。

ただし、C言語のようにmain関数の引数を

int main(int argc, char *argv[]){}

とするような記述(文字部分)は必要ありません。

結論から言うと、

import sys

を先頭でインポートして、

argv = sys.argv

で変数argv配列形式の文字列として取り出せます。

コマンドライン引数とは?

そもそもコマンドラインって何?ですが、単純に言うならキーボードから入力する文字列のことです。
正式には、ターミナル(Windowsだとコマンドプロンプトやパワーシェル)上で、コンピュータに与える命令文として入力した文字列コマンドラインと呼んでいると考えてください。

で、コマンドライン引数ですが、ターミナル上でのcdというコマンドライン命令を例にとると、

cd hogehoge

hogehogeという文字列がコマンドライン引数になります。

cdというコマンドライン命令は、スペースの後にくる文字列をコマンドライン引数として取得することができるため、上記のような命令が可能というわけです。

ちなみに上記のコマンドの意味は、現在のディレクトリからhogehogeディレクトリに移動しなさい、という命令文(コマンド)になります。

引数とは、つまり入力値なのです。

Pythonでコマンドライン引数を取得するサンプルコード

単純な例で示します。

コマンドラインから

python getCommandLine.py Hello 123

として実行したとき(getCommandLine.pyはPythonスクリプト名です)、引数として指定したgetCommandLine.pyHello123の文字列をそれぞれ取り出す場合、次のように記述できます。

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

実際の活用例

コメント

タイトルとURLをコピーしました