【argparse】コマンドライン引数でメニュー/呼び出す関数の選択
コマンドライン引数を設定する標準ライブラリargparse
を初めて使ってみる。
オプションから関数が呼び出せるか試してみるテスト。
【実行環境】
Termux
Python3.9
コマンドライン引数を使う最も簡単な方法は、標準ライブラリsys
を使ってsys.argv
で取得するものだろうか。入門書には必ずこれが最初に出てくる。
簡単な使用例を。
sys.argv
test_sys_argv.py
# ライブラリのインポート import sys # 関数の定義(コマンドライン引数の表示) def printArgs(): print(sys.argv) # 実行 printArgs()
上記のファイルをターミナルで実行する。
$ python test_sys_argv.py hahaha lol warota ['test_sys_argv.py', 'hahaha', 'lol', 'warota' ]
引数の要素の一番目はそのファイル自身、そしてその他の引数が続く。リスト形式で戻る。
argparse
今度は、標準ライブラリargparse
を使う。色んな細かい設定ができるようですが、こちらも簡単に触れる。
test_argparse.py
# ライブラリのインポート import argparse # parser = argparse.ArgumentParser() # コマンドライン引数を追加する ## int型の引数x parser.add_argument("x", type=int, help="引数1を入力ください") # int型の引数y parser.add_argument("y", type=int, help="引数2を入力ください") # true/falseを返すオプション引数 ## 関数呼び出し用 parser.add_argument("--menu1", action="store_true", help="引数x+yの算出") # true/falseを返すオプション引数 ## 関数呼び出し用 parser.add_argument("--menu2", action="store_true", help="引数x-yの算出") args = parser.parse_args() # 入力されたコマンドライン引数の表示 print("x :",args.x) print("y :",args.y) print("munu1 :",args.menu1) print("munu2 :",args.menu2) # オプションで呼び出す関数定義 def plus(x, y): print(f"{x} + {y} = ",x + y) def minus(x, y): print(f"{x} - {y} = ",x - y) # オプションで呼び出された時のアクション if args.menu1: plus(args.x, args.y) if args.menu2: minus(args.x, args.y)
- 引数
x
とy
を与えると、それぞれargs.x
とargs.y
で取得できる。 x
とy
のどちらか一方でも抜けるとが自動的に表示される。- オプション引数で
--menu1
と--menu2
を追加することで、引数x
とy
を使った関数を呼び出して計算結果を表示する。 - オプション引数の
-h
か--help
でヘルプの表示
オプション引数--help
$ python test_argparse.py -h usage: testArgparse.py [-h] [--menu1] [--menu2] x y positional arguments: x 引数1を入力ください y 引数2を入力ください optional arguments: -h, --help show this help message and exit --menu1 引数x+yの算出 --menu2 引数x-yの算
引数が欠如した場合
$ python test_argparse.py 5 usage: testArgparse.py [-h] [--menu1] [--menu2] x y testArgparse.py: error: the following arguments are required: y shell returned 2
int型引数を1つしか入力しなかった為に使用法と注意が出た。
ちゃんと引数を2つ入力した場合
$ python test_argparse.py 5 7 x : 5 y : 7 munu1 : False munu2 : False
オプション引数は入力していないので共にFalse
になっている。
オプション引数を1つ入力
$ python test_argparse.py 5 7 --menu1 x : 5 y : 7 munu1 : True munu2 : False 5 + 7 = 12
menu1
のオプションを入力したのでそこだけTrue
になり、足し算用の関数が呼び出されて計算結果が表示されている。メニューとして使えるね。
オプション引数を2つ同時入力
$ python test_argparse.py 5 7 --menu1 --menu2 x : 5 y : 7 munu1 : True munu2 : True 5 + 7 = 12 5 - 7 = -2
オプションをオンにした両方の計算結果が表示された。スクリプトの関数呼び出し部分で、2つともif
にしている。if
とelse
やelif
にすると同時には表示されなかった。
両方if
で。
--menu2
のみは省略する。引き算だけが表示される。
参考リンク
おわりに
コマンドライン引数を扱う際に、標準ライブラリのsys
やargparse
を使う以外に外部ライブラリでclick
やfire
等があるとのことで、先にfire
をインストールしてみたのですが、便利なのかどうかがわからなかった。ので今回argparseを触ってみた次第でした。
以上です。