編寫命令行工具-fire

命令行工具,即 Cli(command-line interface)。是在圖形用戶界面得到普及之前使用最爲廣泛的用戶界面,它通常不支持鼠標,用戶通過鍵盤輸入指令,計算機接收到指令後,予以執行。

Windows上的自帶的命令行工具,就是我們最常接觸的cmd

在python中,我們可以運用python的fire模塊輕鬆編寫命令行工具。fire會對當前對象結構進行暴露,將結構信息映射到shell命令行參數上。

 

簡單書寫一個函數,使用fire.Fire()命令暴露函數

#test_fire.py

import fire
def add(a,b):
    return a+b

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

可以使用python test_fire.py命令查看幫助信息(博主python環境命令是python3)

我們可以看到傳給 fire.Fire() 的參數類型(function)、文件路徑、文檔字符串、參數用法等信息。

 

接下來計算add

函數傳參的時候也可以使用關鍵字傳參。

 

此外,對於這種單個函數的情況,程序的最後一行 fire.Fire(cal_days) 可以改爲 fire.Fire(),結果完全一樣,fire.Fire() 會默認使用 cal_days() 函數。

這就引入了下一個問題,多函數的fire.Fire()

 

多函數暴露

fire.Fire()默認只有最後一個函數或對象生效

如果需要多個函數或類進行暴露,可以使用字典形式來傳遞函數和函數的簡稱

例如

import fire

def add(a,b):
    return a+b

def multiply(a,b):
    return a*b

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

輸入鍵就調用了對應的函數,傳遞多個參數時用空格分隔

 

類與對象

暴露對象fire.Fire(class())適用於無參數的類,或是在暴露時直接寫定參數fire.Fire(class(a=1))

而暴露類fire.Fire(class)需要在命令行調用時使用關鍵字傳遞進參數

例如

import fire

class F():
    def __init__(self,coco):
        self.coco=coco
    
    def add(a,b):
        return a+b

    def multiply(a,b):
        return a*b

if __name__=='__main__':
    fire.Fire(F(coco=2))  #命令行輸入python 文件名.py add 1 2
#    or
#   fire.Fire(F) 在命令行輸入python 文件名.py add 1 2 --coco=2

簡單的fire模塊構建命令行工具就是這些,想要深入瞭解可以參考:

https://www.zhihu.com/question/280094723

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章