Python-Fire is very cool.

概要

黒い画面でパソコンをカタカタするオタクはCLIツールの作成は命題の一つである。 いろんなツールを作ってみた後、 私はそれをデバッグするにことがあった。 自分の為のツール作成をしていると雑に実装していたりしており、驚くことが多い。 どうやら、簡単に作れると簡単に理解できるというのは違う概念のようだ。 ここではPython-Fireを紹介したい。

オプションパーサー

pythonコマンドラインオプション解析する方法を示しました。

  1. sys.argv
    一番、手軽に使えて基本的かつ手軽なやり方ですが引数の順番が変わったりすると対応がめんどくさくなるためオプションパーサーとしての応用がさせにくいです。
  2. argparse
    sys.argvに比べてadd_argumentを用いて必須項目を設定したり、変数の保存先を指定したり、真偽値を保存したり、変数の型を指定したりと様々なことが出来ます。

前回argparseを使ってコマンドラインツールを作ってみた。

今回はPython Fireを使ってみる。

Python-Fireとは

Python Fireは、任意のPythonオブジェクトからコマンドラインインターフェイスCLI)を作成するためのライブラリです。
Python Fireによって、出来ることは様々です。

  • Python Fireは、PythonCUIを作成する簡単な方法です。
  • Python Fireは、Pythonコードの開発とデバッグに役立つツールです。
  • Python Fireは、既存のコードを調べたり、他の人のコードをCLIに変えたりするのに役立ちます。
  • Python Fireは、BashPythonの間の移行を簡単にできます。

github.com

俺の環境

インストール

$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 に遅れをとるが個人的に使うには問題ないとおもうし何よりかなりお手軽なのが嬉しい。控えめに言って最高。