命令行工具,即 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