在 Python 中,命令行解析庫有非常多的選擇方案,系統自帶的 模塊有 argparse,有 Flask 作者寫的 click,但是 argparse 使用起來囉嗦, 要經歷解析器初始化、參數定義、解析一套流程。例如:
# -*- coding: utf-8 -*-
# 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 則是以裝飾器的形式作用在目標函數中,要侵入函數本身,本質上還是對 argparse 的一種改進,並沒有太多創新,算是一種改良作品。
# -*- coding: utf-8 -*-
import argparse
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}
接下來要介紹的這個命令行解析工具非常牛逼,把命令行工具做到了極致,算是一種顛覆式創新,一行代碼能把函數導出到命令行窗口,這個工具叫Python-fire,可能經常寫命令行工具的人知道,該項目是 Google 開源的 Python 庫(可能是 Google 工程師的 Side Project,因爲項目主頁申明說它不是 Google 官方項目),名字就像一團?。該庫是對argparse庫的進一步封裝,用起來非常方便,靈活和高效。