1

I have a simple test python-fire cli program in python 2.7.15

import fire

class Math:
    def add(x, y):
      """add"""
      return x + y

    def multiply(x, y):
      """multiply"""
      return x * y

if __name__ == '__main__':
  fire.Fire(Math)

If I write

python-fire-test.py

the response from the program is

Type:        instance
String form: <__main__.Math instance at 0x0000000003CE89C8>

Usage:       python-fire-test.py
             python-fire-test.py add
             python-fire-test.py multiply

However I don't expect to see

Type:        instance
String form: <__main__.Math instance at 0x0000000003CE89C8>

printed at the top. Can I stop this behaviour?

bradgonesurfing
  • 30,949
  • 17
  • 114
  • 217

2 Answers2

0

This behavior has been replaced with cleaner output in Python Fire v0.2.0. Upgrade Fire with pip install -U fire to get the latest version.

  • Not quite. The main problem stems from the utilization. Per the README, the operation needs to be specified along with the values to compute the result. e.g. `python python-fire-test.py add 5 5` would be the correct way I believe. – idjaw Aug 13 '19 at 17:14
0

You have two problems in your code. The more immediate one as to why you are actually getting the result you are seeing is because of a misuse of the library.

The result you are getting is in fact simply the result of fire.Fire(Math), which is a representation of the instance object you are getting from fire.Fire(Math).

Your utilization should in fact be this:

(venv) ➜ python python-fire-test.py multiply 5 5
25
(venv) ➜ python python-fire-test.py add 5 5     
10

However, there is another problem you are facing that won't get you that result either now. In your code you are creating a class called Math. In your instance methods (add, multiply), you are going to face issues when you try to use it, due to the fact you are not passing the necessary explicit reference for the instance itself self. So, your code should now be:

import fire

class Math:
    def add(self, x, y):
      """add"""
      return x + y

    def multiply(self, x, y):
      """multiply"""
      return x * y

if __name__ == '__main__':
  fire.Fire(Math)

A little further down in the README for the lib you are using the utilization is shown as:

python calculator.py double 10  # 20
python calculator.py double --number=15  # 30
idjaw
  • 25,487
  • 7
  • 64
  • 83