【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を触ってみた次第でした。
以上です。