python-fireでコマンドライン引数が関数やメソッドに渡るようにする
pythonpython-fire は Python のオブジェクトから CLI を作れるライブラリ。
$ pip install fire
次のように fire.Fire() でラップするだけでコマンドライン引数を関数やメソッドに渡すことができる。
$ cat main.py
import fire
class FizzBuzz:
def fizzbuzz(self, num):
ret = ""
if num % 3 == 0:
ret += "fizz"
if num % 5 == 0:
ret += "buzz"
if len(ret) != 0:
return ret
return str(num)
def fizzbuzzs(self, nums):
return [self.fizzbuzz(num) for num in nums]
if __name__ == '__main__':
fire.Fire(FizzBuzz)
$ python main.py fizzbuzzs --nums="[2,21,30]"
2
fizz
fizzbuzz
引数は ast.literal_eval() で文字列や数値、list などに評価される。
import ast
root = ast.parse('[{"a":100}]', mode='eval')
print(type(ast.literal_eval(root))) # <class 'list'>
そのほか REPL で実行したり trace を表示したりもできる。
$ python main.py -- --interactive
>>> FizzBuzz().fizzbuzz(10)
'buzz'
$ python main.py fizzbuzzs --nums="[2,21,30]" -- --trace
Fire trace:
1. Initial component
2. Instantiated class "FizzBuzz" (xxx/main.py:3)
3. Accessed property "fizzbuzzs" (xxx/main.py:14)
4. Called routine "fizzbuzzs" (xxx/main.py:14)