python常用的命令列解析庫
阿新 • • 發佈:2018-12-10
1、argparse
argparse是python自帶的模組,要經歷解析器初始化、引數定義、解析一套流程,使用起來有些繁瑣。
argpase的使用:
class Calculator(object): """ 計算器 """ def add(self, x, y): """ 加法運算 Args: x: 第一個運算元 y: 第二個運算元 """ return x + y def sub(self, x, y): return x - y def multiply(self, x, y): return x * y def devide(self, x, y): assert y != 0, "y引數不正確" return x / y if __name__ == "__main__": # 初始化解析器 parser = argparse.ArgumentParser() # 定義引數 parser.add_argument("action", choices=["add", "sub", "multiply", "devide"], help="操作") parser.add_argument("x", type=int, help="第一個運算元") parser.add_argument("y", type=int, help="第二個運算元") parser.add_argument("-v", "--verbose", help="顯示詳細資訊", action="store_true") # 解析 args = parser.parse_args() calculator = Calculator() if args.verbose: print "x=", args.x print "y=", args.y print "action=", args.action print "result:", getattr(calculator, args.action)(args.x, args.y) |
2、click
Click 是flask作者用 Python 寫的一個第三方模組,用於快速建立命令列。Click 相比於 Argparse,就好比 requests 相比於 urllib。
Click 則是以裝飾器的形式作用在目標函式中,要侵入函式本身,本質上還是對 argparse的一種改良作品。 一篇click使用的文章:http://python.jobbole.com/87111/
click的使用:
class Calculator(object): """ 計算器 """ def add(self, x, y): """ 加法運算 Args: x: 第一個運算元 y: 第二個運算元 """ return x + y def sub(self, x, y): return x - y def multiply(self, x, y): return x * y def devide(self, x, y): assert y != 0, "y引數不正確" return x / y @click.command() # 裝飾一個函式,使之成為命令列介面 @click.option("--verbose", type=click.BOOL, default=False, help="Show verbose info.") # 定義選項,help還不支援中文,報編碼問題 @click.argument("action", type=click.Choice(["add", "sub", "multiply", "devide"])) # 定義固定引數 @click.argument("x", type=click.INT) @click.argument("y", type=click.INT) def calc(action, x, y, verbose): calculator = Calculator() if verbose: print "x=", x print "y=", y print "action=", action print "result:", getattr(calculator, action)(x, y) if __name__ == "__main__": calc() |
3、fire
fire 這個命令列解析工具非常牛逼,把命令列工具做到了極致,算是一種顛覆式創新,
一行程式碼能把函式匯出到命令列視窗,該專案是 Google工程師開源的 Python 庫,雖然程式碼放到了google官方賬號下,但是專案主頁申明說它不是 Google 官方專案。
fire的使用:
# 用法1: fire.Fire() # 直接在程式中呼叫 fire.Fire(),不需要修改目標函式,fire 會把當前模組下的所有物件匯出到命令列中 def add(x, y): return x + y def sub(x, y): return x - y hello = "hello world" if __name__ == "__main__": fire.Fire() # 用法2: fire.Fire(<fn>) # Fire 可以指定某個函式匯出到命令列 def add(x, y): return x + y if __name__ == "__main__": fire.Fire(add) # 當 Fire 接收函式 add 作為引數時,只加載 add 函式到命令列中,此時,在命令列中執行時也無需再指定函式名字,只需要指定引數就好。 # 用法3:fire.Fire(<dict>) # Fire 不僅可以接收函式,還可以接收字典物件作為引數,可在字典中配置那些函式需要匯出到命令列中。例如,有加減乘3個函式,我們可以選擇性的選擇其中2個匯出到命令列。 def add(x, y): return x + y def sub(x, y): return x - y def test(): return "test" if __name__ == "__main__": fire.Fire({ "add": add, "sub": sub }) # 用法4:fire.Fire(<object>) # Fire 還可以接收類的例項物件 if __name__ == "__main__": calculator = Calculator() fire.Fire(calculator) # 用法5:fire.Fire(class) # Fire 還可以接收一個類作為引數 if __name__ == "__main__": fire.Fire(Calculator) |