概要
黒い画面でパソコンをカタカタするオタクはCLIツールの作成は命題の一つである。
いろんなツールを作ってみた後、 私はそれをデバッグするにことがあった。 自分の為のツール作成をしていると雑に実装していたりしており、驚くことが多い。 どうやら、簡単に作れると簡単に理解できるというのは違う概念のようだ。
ここではPython-Fire
を紹介したい。
オプションパーサー
pythonでコマンドラインオプション解析する方法を示しました。
- sys.argv
一番、手軽に使えて基本的かつ手軽なやり方ですが引数の順番が変わったりすると対応がめんどくさくなるためオプションパーサーとしての応用がさせにくいです。 - argparse
sys.argvに比べてadd_argumentを用いて必須項目を設定したり、変数の保存先を指定したり、真偽値を保存したり、変数の型を指定したりと様々なことが出来ます。
前回はargparseを使ってコマンドラインツールを作ってみた。
今回はPython Fireを使ってみる。
Python-Fireとは
Python Fireは、任意のPythonオブジェクトからコマンドラインインターフェイス(CLI)を作成するためのライブラリです。
Python Fireによって、出来ることは様々です。
- Python Fireは、PythonでCUIを作成する簡単な方法です。
- Python Fireは、Pythonコードの開発とデバッグに役立つツールです。
- Python Fireは、既存のコードを調べたり、他の人のコードをCLIに変えたりするのに役立ちます。
- Python Fireは、BashとPythonの間の移行を簡単にできます。
俺の環境
- Ubuntu 16.04.1 LTS
- python3
インストール
$pip3 install fire
CUIツール的に使ってみる。
コードです。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import fire class test(object): def Power_of_2(self, num): return 2 ** num if __name__ == '__main__': fire.Fire(test)
走らせます。
$python3 sample.py Power_of_2 10 1024
base64のそれっぽい何かを作ります。
#! /usr/bin/env python # -*- coding:utf-8 -*- import base64 import fire class base64_test(object): def base(self,data): print(("data:{}").format(data)) # base 64でencode enc_data = base64.encodestring(data.encode("utf8")).decode("ascii") # そんなデータを出力 print(("encode data:{}").format(enc_data)) # decodeするよ dec_data = base64.decodestring(enc_data.encode("ascii")).decode("utf8") # そんなデータを出力 print (("decode data:{}").format(dec_data)) if __name__ == '__main__': fire.Fire(base64_test)
使います。
$python3 import_base64.py base motouchi
出力
$python3 import_base64.py base motouchi data:motouchi encode data:bW90b3VjaGk= decode data:motouchi
最後に
Help機能などではargparse に遅れをとるが個人的に使うには問題ないとおもうし何よりかなりお手軽なのが嬉しい。控えめに言って最高。