Python入門トップページ


目次

  1. Jupyter notebook でダウンロード
  2. コマンドプロンプトで実行する
  3. 実行結果をファイルに書き出す
  4. コマンドライン引数を使用する (1) 位置引数の使用
  5. コマンドライン引数を使用する (2) オプショナル引数の使用

コマンドプロンプトで Python プログラムを実行しよう

コマンドライン引数を使用する (2) オプショナル引数の使用

さらに,オプショナル引数を利用するプログラムを作成しよう.たとえば op.py というプログラムを作成し,実行時に op.py 2 10 -o pow のように引数を渡すと,2の10乗を計算して1024を出力し,op.py 2 10 -o mul のように引数を渡すと,2*10を計算して20を出力する,また,オプショナル引数を省略した場合は和が計算されるというように,様々な演算を行うプログラムを作成します.

オプショナル引数を利用するには,下記プログラム (op.py) の1行目にあるように argparse モジュールをインポートします.実行時のコマンドライン引数は argparse モジュールによって解析され,その結果を変数に格納できます.また,実行時のヘルプ表示なども自動的に生成されます.なお,argparse の詳細は Python チュートリアルを確認すると良いでしょう.

下記のプログラム op.py では,2個の位置引数と1個のオプショナル引数を指定します.22行目からがメインの処理ですが,最初に get_args() 関数が実行され,コマンドライン引数を取り出す処理が行われる.10行目と11行目で整数型の2つの位置引数を取得しています.14行目では,計算方法を指定するオプショナル引数を取得します.このとき,オプショナル引数に指定できる演算方法(文字列)を列挙します.つまり,指定できる計算方法は add(和: addition),sub(差:subtraction),mul(積:multiplication),div(商:division),pow(べき乗:power)です.

様々な演算を行うプログラム (op.py)
import argparse

"""
コマンドライン引数を取り出す処理を行う関数
"""
def get_args():
    # オブジェクトを生成する
    parser = argparse.ArgumentParser()
    # 2つの位置引数を指定する
    parser.add_argument("a", type=int, help="value of a")
    parser.add_argument("b", type=int, help="value of b")

    # 計算方法をオプショナル引数として指定する
    parser.add_argument("-o", "--operation", choices=['add', 'sub', 'mul', 'div', 'pow'], help="Type of operation")

    args = parser.parse_args()
    return(args)

"""
ここからメイン
"""
args = get_args()
a = args.a
b = args.b

if args.operation:
    operation = args.operation
else:
    operation = 'add'   # 省略時はデフォルトの add にする

# 計算処理と結果の表示
if operation == 'sub':
    result = a - b
    print(a, '-', b, '=', result)
elif operation == 'mul':
    result = a * b
    print(a, 'x', b, '=', result)
elif operation == 'div':
    result = a / b
    print(a, '/', b, '=', result)
elif operation == 'pow':
    result = a ** b
    print(a, '^', b, '=', result)
else:
    result = a + b
    print(a, '+', b, '=', result)

実際に上のコード (op.py) を実行してみよう.まず,コマンドライン引数を指定せずに実行すると,エラーとなるが,使用方法 (usage) が表示されます.-h(ヘルプ)および -o の2種類のオプショナル引数と ab の2種類の位置引数があることがわかります.さらに,オプショナル引数 -o には,add, sub, mul, div, pow のいずれかを指定できることもわかります.

Z:\Documents\python>python op.py ⏎
usage: op.py [-h] [-o {add,sub,mul,div,pow}] a b
op.py: error: the following arguments are required: a, b

ヘルプを見るオプショナル引数があることがわかったので,-h オプションを指定してヘルプを見てみよう.より詳細に引数の設定方法とその意味を確認できます.

Z:\Documents\python>python op.py -h ⏎
usage: op.py [-h] [-o {add,sub,mul,div,pow}] a b

positional arguments:
  a                     value of a
  b                     value of b

optional arguments:
  -h, --help            show this help message and exit
  -o {add,sub,mul,div,pow}, --operation {add,sub,mul,div,pow}
                        Type of operation

ヘルプを確認するためには --help と指定しても良いでしょう.

Z:\Documents\python>python op.py --help ⏎
usage: op.py [-h] [-o {add,sub,mul,div,pow}] a b

positional arguments:
  a                     value of a
  b                     value of b

optional arguments:
  -h, --help            show this help message and exit
  -o {add,sub,mul,div,pow}, --operation {add,sub,mul,div,pow}
                        Type of operation

オプショナル引数を省略して実行した場合は,和が計算されます.

Z:\Documents\python>python op.py 2 10 ⏎
2 + 10 = 12

オプショナル引数を指定して,和を計算します.

Z:\Documents\python>python op.py 2 10 -o add ⏎
2 + 10 = 12

同様に,様々なオプショナル引数を指定して計算してみます.

Z:\Documents\python>python op.py 2 10 -o add ⏎
2 + 10 = 12

Z:\Documents\python>python op.py 2 10 -o sub ⏎
2 - 10 = -8

Z:\Documents\python>python op.py 2 10 -o mul ⏎
2 x 10 = 20

Z:\Documents\python>python op.py 2 10 -o div ⏎
2 / 10 = 0.2

Z:\Documents\python>python op.py 2 10 -o pow ⏎
2 ^ 10 = 1024

オプショナル引数は省略形 -o 以外にも --operation のように省略せずに記述することができます.

Z:\Documents\python>python op.py 2 10 --operation pow ⏎
2 ^ 10 = 1024

オプショナル引数を省略形で指定する場合は -o の直後にスペースが無くても良いでしょう.

Z:\Documents\python>python op.py 2 10 -opow ⏎
2 ^ 10 = 1024

省略せずに記述する場合は --operation の直後にスペースが必要です.よって,次のような指定ではエラーになります.

Z:\Documents\python>python op.py 2 10 --operationpow ⏎
usage: op.py [-h] [-o {add,sub,mul,div,pow}] a b
op.py: error: unrecognized arguments: --operationpow

オプショナル引数は,位置引数の前に記述しても良いでしょう.

Z:\Documents\python>python op.py -o pow 2 10 ⏎
2 ^ 10 = 1024

プログラム (op.py) の10行目,11行目では,ab の型に int(整数)を指定しているので,実行時に引数の型が自動的にチェックされます.したがって,次のように引数 b に実数を指定した場合はエラーを表示できます.

Z:\Documents\python>python op.py 2 3.14 -o add ⏎
usage: op.py [-h] [-o {add,sub,mul,div,pow}] a b
op.py: error: argument b: invalid int value: '3.14'

引数 ab の型は int(整数)であるので,もちろん0や負の値を入力することは可能です.

Z:\Documents\python>python op.py 2 0 -o add ⏎
2 + 0 = 2

Z:\Documents\python>python op.py 2 -10 -o add ⏎
2 + -10 = -8

Z:\Documents\python>python op.py 2 -10 -o pow ⏎
2 ^ -10 = 0.0009765625

ただし,0 で割ることはできないので,商に関しては例外処理の記述を追加する必要があるでしょう.

Z:\Documents\python>python op.py 2 0 -o div ⏎
Traceback (most recent call last):
  File "op.py", line 39, in <module>
    result = a / b
ZeroDivisionError: division by zero

目次に戻る