らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Python 実行時の引数で関数を呼び出せる fire を試す

Google が作った fire というライブラリを使うと、Python スクリプトを実行する時の引数にメソッドを呼び出せるようになります。 場合によっては便利に使えるので、簡単な使い方をメモしておきます。

fire のインストール

pip で簡単にインストール出来ます。

pip install fire

sixtermcolor も一緒にインストールされるようです。

# pip list
Package    Version
---------- -------
fire       0.2.1
pip        19.3.1
setuptools 42.0.2
six        1.13.0
termcolor  1.1.0

サンプル 1 : 関数を指定して実行する

スクリプト

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class MyClass(object):
    def hello(self):
        print('Hello, World!')

if __name__ == '__main__':
    import fire
    fire.Fire(MyClass)

実行結果

関数名 (ここでは hello) を引数にして実行すると、関数の内容が実行されていることが分かります。

# python sample1.py hello
Hello, World!

サンプル 2 : 関数に引数を指定して実行する

スクリプト

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class MyClass(object):
    def addition(self, a, b):
        print(a + b)

    def subtraction(self, a, b):
        print(a - b)

if __name__ == '__main__':
    import fire
    fire.Fire(MyClass)

実行結果

addition(self, a, b) を呼び出してみると関数内定義の通り、足し算が実行されます。

# python sample2.py addition 5 3
8

subtraction(self, a, b) を呼び出してみると関数内定義の通り、引き算が実行されます。

# python sample2.py subtraction 5 3
2

サンプル 3 : コンストラクタに引数を渡す

スクリプト

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class MyClass(object):
    def __init__(self, message):
        self.message = message

    def greet(self):
        print("Hello, " + self.message + "!")

if __name__ == '__main__':
    import fire
    fire.Fire(MyClass)

実行結果

引数を渡すことで、コンストラクタにパラメータを渡せます。

# python sample3.py --message='Python World' greet
Hello, Python World!

参考