コマンドライン引数

プログラムを作成して利用する場合、条件に応じた値を引数で指定する必要が出てくると思います。ここでは、コマンドラインで指定した引数を取得する方法について学習しましょう。

Pythonのコマンドライン引数

コマンドライン引数の取得

Pythonスクリプトを実行する際にコマンドライン引数を指定する場合、sysモジュールのargvを利用します。argvはスクリプトに渡されたコマンドライン引数のリストとなります。

0番目はスクリプトのファイル名が設定され、1番目以降にコマンドライン引数が設定されます。また、入力値は文字列型として扱われます。

では、サンプルで動作を確認してみましょう。

サンプルコード args.py

import sys 
args = sys.argv
print(args)

args.pyという名前で保存して、引数なし、引数ありでそれぞれ動作を確認してみます。

実行結果

# 引数なし
$ python args.py
['args.py']

# 引数:hoge
$ python args.py hoge
['args.py', 'hoge']

# 引数: hoge foo
$ python args.py hoge foo
['args.py', 'hoge', 'foo']

0番目にスクリプト名、それ以降にコマンドライン引数がセットされたリストであることが解ると思います。

このため、以下のように大カッコで番号を指定すると値を取得することが可能です。(リストの要素へのアクセス方法についてはこちらをご参照ください。)

sample.py

from sys import argv

print(argv[0]) # スクリプトファイル名 
print(argv[1]) # 1番目の引数
print(argv[2]) # 2番目の引数

実行結果

python sample.py hoge fuga
sample.py
hoge
fuga

コマンドライン引数の数をチェックする

上のプログラムでは、引数が不足しているとlist index out of rangeというエラーが発生します。こういった場合のため、処理前に引数をチェックするような処理を入れるには、以下のように、lenで引数の数をチェックします。また、前述の通り、文字列として扱われますので、適宜数値チェック等を入れましょう。
サンプルコード

import sys

def main(cod3, name):
    print('main処理を実行します')
    # 以下省略

if __name__ == '__main__':
    args = sys.argv

    if len(args) == 3:
        code = args[1]
        name = args[2]
        main(code, name)
    else:
        print('以下形式でcodeとnameを指定してください')
        print('$ sample.py <code> <name>')
        quit()

上のコードでは、引数に過不足があると、main処理は実行されず、コードのパラメータ指定方法が出力されます。

ちなにみ、len関数は後々説明するリストなどのシーケンシャルな型の要素数を取得することができる、pythonに予め組み込まれている標準関数です。