この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
先日、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のチュートリアル部分の内容をコピペ&追記したものになります)
calculator.py
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利用のインタフェースが提供され、活用出来るというのはなかなかに便利な仕組みなのではと思います。日々の運用で活用しているスクリプトなどに盛り込んでみるのも良いかも知れません。