python庫fire使用簡介


簡介

目前python命令行解析庫用過的有:argparse(python自帶)、click(Flask作者寫的)

但二者相比fire這個庫,用起來都不夠 “簡單”,fire一行代碼能把函數導出到命令行窗口。

argparse用法示例

# arg_test.py

import argparse

def counter(file_type=None):
    return {file_type: 100}

# 初始化解析器
parser = argparse.ArgumentParser()
# 定義參數
parser.add_argument("-f", "--file", help="統計指定文件類型")
# 解析
args = parser.parse_args()
print(counter(args.file))

運行:

$ python arg_test.py -f python
{'python': 100}

click用法示例

# firetest.py

import click

@click.command()
@click.option("-f", "--file", help="統計制定文件類型")
def counter(file=None):
    click.echo({file: 100})

if __name__ == '__main__':
    print(counter())

運行:

$ python firetest.py -f python
{u'python': 100}

fire安裝

# pip安裝:pip install fire
# conda安裝:conda install fire -c conda-forge
# 源碼安裝: git拿到代碼,執行:python setup.py install

fire使用示例

通常:python [文件名] [函數名] [參數]

官方文檔:https://github.com/google/python-fire/blob/master/docs/guide.md

fire.Fire()

直接在程序中調用 fire.Fire(),不需要修改目標函數,fire 會把當前模塊下的所有對象導出到命令行中

# firetest.py

import fire

def foo(name):
    return 'foo {name}!'.format(name=name)

def bar(name):
    return "bar {name}".format(name=name)

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

運行:

# 調用方式:python [文件名] [函數名] [參數]

# 函數名后面直接跟參數值
$ python firetest.py foo hello
foo hello!
# 也可以顯示地先指定參數名,再跟參數值
$ python firetest.py bar --name hello
bar hello!

fire.Fire(<function>)

可以指定某個函數導出到命令行

import fire

def foo(name):
    return 'foo {name}!'.format(name=name)

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

運行:

# 調用方式:python [函數名] [參數]
$ python firetest.py hello
foo hello!

當 Fire 接收函數 foo 作為參數時,只加載 foo 函數到命令行中,此時,在命令行中運行時也無需再指定函數名字,只需要指定參數就好。

fire.Fire(<dict>)

Fire 不僅可以接收函數,還可以接收字典對象作為參數,可在字典中配置那些函數需要導出到命令行中。

例如,有加減乘3個函數,我們可以選擇性的選擇其中2個導出到命令行:

import fire

def add(x, y):
    return x + y

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

def subtract(x, y):
    return x - y

if __name__ == '__main__':
    fire.Fire({
        'add': add,
        'subtract': subtract,
    })

運行:

$ python firetest.py add 1 4
5
$ python firetest.py subtract 1 4
-3
$ python firetest.py multiply 1 4
# multiply 會報錯,因為沒有導出

fire.Fire(<object>)

還可以接收類的實例對象

import fire

class Calculator(object):

  def add(self, x, y):
    return x + y

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

if __name__ == '__main__':
  calculator = Calculator()
  fire.Fire(calculator)

運行:

$ python firetest.py add 10 20
30
$ python firetest.py multiply 10 20
200

 

參考文章:https://mp.weixin.qq.com/s/lMOieL_RFRHsh5OW4G4axg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM