Skip to content

[Python] 使用 Fire 套件直接使用終端機使用函式

Last Updated on 2021-04-05 by Clay

最近在學習各方大神在 Python 當中實做的各種深度學習模型,剛巧看到了一個不熟悉的模組:Fire

當然,最早我是不知道 Fire 是一個什麼樣的模組,只覺得名字好怪。一查之下,挖賽不得了,原來這竟然是 Google 於 2017 年在 Github 上開源的套件。

那既然是 Google 開源的,那這個套件自然是大有道理的(<==腦粉發言),Fire 套件最大的好處就是可以『直接將 Python 變成命令列可以直接輸入參數』。

這是什麼意思呢?

不知道大家對於 argparse 這個套件熟不熟?或者是對 sys.argv 熟不熟? 以上兩種都是讓我們可以在 Command Line 執行 Python 檔的時候輸入參數的套件。若是還不熟、想要了解運作方法,也許可以考慮參考我之前寫過的《使用 Python 自帶的 argparse 套件來調用終端機給予參數》

基本上,從 Command Line 給予參數大概就像這樣:

Python3  "file.py" -arg arg

而 argparse 需要事先設定好我們變數的數量、以及需要的變數名稱;而這一切,只要使用 Fire 模組,只要你寫的 Function、Class 夠清楚,你可以在不需要事先設定參數的情況下自由輸入參數。


Fire 使用方法

說了那麼多,其實不直接 Demo 一次恐怕很難明白,那麼首先來看段簡單的 Sample Code 吧。

如果是第一次使用,別忘了使用以下指令安裝:

pip3 install fire

安裝好之後,我們來定義兩個 function。

# -*- coding: utf-8 -*-
import fire


def printHelloWorld():
    return 'Hello World!'


def name(name):
    return 'your name is {}.'.format(name)


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


Output:

NAME
    fire_test.py

SYNOPSIS
    fire_test.py GROUP | COMMAND

GROUPS
    GROUP is one of the following:
     fire
       The Python Fire module.

COMMANDS
    COMMAND is one of the following:
     printHelloWorld
     name

在程式的最底下,也就是程式的進入點寫下 "fire.Fire()" 即可順利地啟用 Fire 這個模組。

fire_test.py 是我檔案的名字,COMMANDS 底下為我們定義的 function,也是我們等下可以輸入的變數。

好了,執行過一次之後我們便會發現:欸?不對啊,我們的程式沒有執行欸?

這是正常的,我們想要執行 Fire() 啟用的 Python 檔,非得加入要執行的參數不可。

譬如說這樣:

python3 fire_test.py printHelloWorld

Output:

Hello World!

如果我們想要加參數給我們要執行的 function,直接加在 function 後面即可:

python3 fire_test.py name "Clay"

Output:

your name is Clay.

如何,"Clay" 這個名字是不是被傳入 function "name()" 裡頭了呢?


以上,就是簡單的 Python 當中 Fire 的使用方法。Fire 可以讓我們在不用主動寫輸入參數的情況下,直接使用終端機來給予程式參數。

相信熟悉的話,想必對於開發程式有很大的幫助。

Leave a Reply