docopt
用了這個傢伙可以在命令列執行py檔案時傳遞引數,例如 :python test.py --tread_num 10
##1.安裝
以使用者管理為例子做一下測試。
示例**:
"""usermanage
usage:
user_manage user (add|delete) () [--authority=]
user_manage change_name user_manage change_pwd user_manage add_description ...
user_manage -h | --help
user_manage --version
options:
-h --help 幫助.
-v --version 檢視版本號.
--authority=許可權設定 [default: user].
--group=分組
"""from docopt import docopt
arguments = docopt(__doc__, version='usermanage 2.0')
if arguments.get("add"):
print("新增使用者成功")
elif arguments.get("delete"):
print("刪除使用者成功")
elif arguments.get("change_name"):
print("修改名字成功")
elif arguments.get("change_pwd"):
print("修改密碼成功")
elif arguments.get("add_description"):
print("新增使用者描述成功")
測試結果如下:
**解讀
作者很雞賊,它解析py檔案__doc__的返回值 。然後生成乙個dict物件,比如上面例項**在執行python test.py user add fireln 123456 --authority=admin後生成的dict物件就是:
所以命令列所使用的命令都需要在py檔案的說明文件裡定義。在命令列執行時
定義命令列
命令列定義知道在**定義的了,下面來一起學習下怎麼定義的吧。
定義命令列的兩個部分分別是usage和options,下面具體介紹。
usage
usage是有自己的規則的,每乙個usage都可以包含如下元素,可參照user_manage user (add|delete) () [--authority=]:
引數:引數使用大寫字母或者使用尖括號<>圍起來。
選項選項以短橫線開始-或者–。只有乙個字母時格式-o,多於乙個字母時–output。同時還可以把多個單字母的選項合併,-ovi等同於-o、-v、-i。選項也能有引數,此時別忘了給選項新增描述說明。
usage中用到的一些標識的含義,正確地使用他們能夠更好的完成解析任務:
代表可選的元素,方括號內的元素可有可無
()代表必須要有的元素,括號內的元素必須要有,哪怕是多個裡面選乙個。
|互斥的元素,豎線兩旁的元素只能有乙個留下
…代表元素可以重複出現,最後解析的結果是乙個列表
[options]
指定特定的選項,完成特定的任務。
egret 變數 Egret全新RES模組詳解
近期egret發布了全新的4.0版本,此次版本中最大的特色就是釋放了全新的res資源管理模組。相信不少人在官網或者直播中已經對新的res資源管理模組有所了解。這篇文章就全新的res進行一次介紹。與此同時,在引擎新版本中,由於引入了typescript 2.1.4,所以在語法糖層面也增加不少特性,我後...
python中urllib模組用法例項詳解
一 問題 近期公司專案的需求是根據客戶提供的api,我們定時去獲取資料,之前的方案是用php收集任務存入到redis佇列,然後在linux下做乙個常駐程序跑某乙個p程式設計客棧hp檔案,該php檔案就乙個無限迴圈,判斷redis佇列,有就執行,沒有就break.二 解決方法 最近剛好學了一下pyth...
Python Mock模組原理及使用方法詳解
一 mock是什麼?英譯中含義有 虛假的 不誠實的 模仿的 模擬的 這個意思 這個庫的主要功能就是模擬一些事務 官方解釋 mock是python中乙個用於支援單元測試的庫,它的主要功能是使用mock物件替代掉指定的python物件,以達到模擬物件的行為 二 為什麼要用mock?舉例 假設你開發乙個專...