Pythonコードからコマンドラインインターフェイスを自動生成するツール『Python Fire』を試してみた
先日、Googleから『Python Fire』なるものが発表されました。関連記事によると『Pythonコードからコマンドラインインターフェイスを自動生成するツール』なのだそうです。ざっと見た感じ利用のハードルも低く、すぐに使えそうなものでしたので早速試してみました。
Python Fireの導入
Python Fireの導入方法及び使い方については下記GitHubの情報にまとまっています。こちらを参考にしながら進めて行きます。
検証環境にはAmazon Linux AMIの最新版を用いました。ログイン後の環境はPython2.7系がデフォルトで導入されています。
$ ssh -i xxxxxxxxx.pem ec2-user@xxx.xx.xxx.xx $ sudo yum -y update $ python --version Python 2.7.12
GitHubの手順ではいきなりfireをpipインストールしていましたが手元で試した形だとエラーとなっていました。予め必要なライブラリをyumで導入後、pipでfireをインストールします。
$ sudo yum -y install python-devel $ sudo yum -y install gcc $ sudo pip install fire
Fireを使ったプログラミング実践
環境は整いました。fireパッケージをimportする形で、以下のようなサンプルプログラムを作成してみます(※GitHubのチュートリアル部分の内容をコピペ&追記したものになります)
import fire class Calculator(object): """A simple calculator class.""" def double(self, number): return 2 * number def hello(self, username): return "Hello, " + username + "!!" if __name__ == '__main__': fire.Fire(Calculator)
作成したPythonプログラムにメソッド名/引数を渡す形で実行してみます。すると以下のような形で結果が返って来ました!
$ python calculator.py double 1000 2000 $ python calculator.py double --number=12345678 24691356 $ python calculator.py hello mesoko Hello, mesoko!!
オプションで指定可能なものも幾つか用意されています。-- --helpでヘルプコマンドの表示。
$ python calculator.py -- --help Type: type String form: <class '__main__.Calculator'> File: ~/calculator.py Line: 3 Docstring: A simple calculator class.
-- --verboseで利用方法も含めた詳細なヘルプコマンドの表示。
$ python calculator.py -- --verbose Type: Calculator String form: <__main__.Calculator object at 0x7faa1f105e10> File: ~/calculator.py Docstring: A simple calculator class. Usage: calculator.py calculator.py __class__ calculator.py __delattr__ calculator.py __dict__ calculator.py __doc__ calculator.py __format__ calculator.py __getattribute__ calculator.py __hash__ calculator.py __init__ calculator.py __module__ calculator.py __new__ calculator.py __reduce__ calculator.py __reduce_ex__ calculator.py __repr__ calculator.py __setattr__ calculator.py __sizeof__ calculator.py __str__ calculator.py __subclasshook__ calculator.py __weakref__ calculator.py double calculator.py hello
-- --completionでbash用のコマンドライン補完(command line completion)スクリプトを生成表示します。
$ python calculator.py -- --completion # bash completion support for calculator.py # DO NOT EDIT. # This script is autogenerated by fire/completion.py. _complete-calculatorpy() { local start cur opts COMPREPLY=() start="${COMP_WORDS[@]:0:COMP_CWORD}" cur="${COMP_WORDS[COMP_CWORD]}" opts="" if [[ "$start" == "calculator.py" ]] ; then opts="double hello" fi if [[ "$start" == "calculator.py hello" ]] ; then opts="--self --username" fi if [[ "$start" == "calculator.py double" ]] ; then opts="--number --self" fi COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 } complete -F _complete-calculatorpy calculator.py
Python Fireの詳細な利用方法や解説についてはGitHubの下記ドキュメントをご参照ください。
- python-fire/benefits.md at master · google/python-fire · GitHub
- python-fire/using-cli.md at master · google/python-fire · GitHub
まとめ
Pythonコードからコマンドラインインターフェイスを自動生成するツール、Python Fireのご紹介でした。インポート文1つでCLI利用のインタフェースが提供され、活用出来るというのはなかなかに便利な仕組みなのではと思います。日々の運用で活用しているスクリプトなどに盛り込んでみるのも良いかも知れません。