Part 1 說明:
0 嫌啰嗦的直接到 正式開始 的位置该面。
1 docopt 是一個(gè)參數(shù)解析的庫。所以這個(gè)算是一個(gè)小教程信卡。如果沒有python基礎(chǔ)隔缀,還是建 議先去學(xué)一下。
2 另外百度一下發(fā)現(xiàn)了 optparse 這個(gè)python 系統(tǒng)自帶的庫傍菇。簡單的看了看猾瘸。知乎上大神說 珍愛生命 遠(yuǎn)離 optparse。下了我一跳丢习。這里不代表我的觀點(diǎn)牵触。畢竟自帶的,可以去看看比較一下咐低。荒吏。。不過這不是本文的重點(diǎn)了渊鞋。
3 百度了半天的docopt 教程只找到了這個(gè) 看了還是沒怎么懂绰更。算了,還是自己搞一搞吧锡宋。
part 2 背景:
前幾天儡湾,看了一個(gè)教程。制作一個(gè)火車票查看器這個(gè)小功能作者寫得挺有思路確實(shí)寫得不錯(cuò)执俩,如果感興趣可以去看看這個(gè)文章徐钠。制作完這個(gè)小的工具以后就能用命令去查詢相應(yīng)的火車票情況。 so cool役首。
python學(xué)藝不精+_+尝丐,想探究一下命令是怎么一步步控制執(zhí)行代碼的。打開作者的文件里面發(fā)現(xiàn)了只是這個(gè)樣子衡奥。
甚至都沒有看到怎么去寫出想要的規(guī)則爹袁??好吧矮固,一開始我也是拒絕的失息。那么就去找一下源碼吧。這里的說明也是最權(quán)威了,于是找到了這么一段話:
大概意思是: 我擦盹兢,你還用原始的方式寫解析參數(shù)邻梆? 別傻了,你是不是想一邊寫注釋 一邊 順帶把解析規(guī)則也寫了绎秒,對浦妄!docopt就是要讓你這么吊~ (翻譯的不對?)
看了上面的這段話我也是深深的震精了见芹? 什么校辩? 注釋都能用在程序里面? 合理嗎辆童? 于是自己還是去探究了一下如下函數(shù):
也就是說 這個(gè)函數(shù)里面的注釋能通過一個(gè)doc 參數(shù)打印出來,當(dāng)然要是這個(gè)是整個(gè)文檔的說明惠赫,那么打印的就是文檔對應(yīng)的doc 這里就不測試了把鉴,下面的就是這樣的例子。docopt的作者也是真的吊吊吊儿咱。
好吧安裝 docopt 的方式 pip3 install docopt 庭砍。上面寫了那么多廢話。都懶得刪除了混埠。怠缸。。
正式開始
docopt 用了一天了感覺完整的分析一個(gè)demo 就能說明其中基本用法了钳宪。揭北。
上圖是一個(gè)完整的demo
主函數(shù)就是調(diào)用罷了。沒什么好說的
看上面分了4個(gè)部分 Usage Arguments Options Examples 各個(gè)分析一下:
Options:
指令 zhangTestArgument.py -qvrh 123.txt 里面的參數(shù) 是 -qvrh 下面是對參數(shù)的說明:
-h --help 這兩個(gè)沒什么卵區(qū)別吏颖,中間可以使 空格也可以是 逗號搔体!如果是 長指令 前面是用 -- (例如 --help)
這種還是糾結(jié)了一下:
-q 其實(shí)代表的是 --quite Sel 那么當(dāng)我們執(zhí)行 zhangTestArgument.py -q [FILE] 這個(gè)指令的時(shí)候 實(shí)際上相當(dāng)于是 zhangTestArgument.py --quite Sel [FILE] 這樣就是兩個(gè)參數(shù)了~
Arguments:
這里面是敘述的是上面的參數(shù) 后面跟著的是說明了這個(gè)參數(shù)的作用。(筆者看了看這塊感覺除了說明一些是做什么的半醉,好像沒啥用了疚俱。)
Examples:
這就是告訴怎么用。缩多。呆奕。
Usage:(Usage是聲明指令怎么使用的部分,必須要寫的衬吆,下面是重中之重)
- zhangTestArgument.py 這個(gè)部分是名字 如指令 python3 XXXX -vf file.txt 其中的 XXXX 就是這
- [-vqrh] 這個(gè)是參數(shù)位置 這里面的參數(shù)必須要在下面的 options 選項(xiàng)中聲明. 這里面添加了 [] 這個(gè)是因?yàn)?這些參數(shù)是可選的梁钾,要是直接寫成 -v 這樣那么想執(zhí)行這條指令必須寫-v。其實(shí)可以寫成 [-v][-q][-r][-h]逊抡,這樣也行陈轿,但是怪怪的。另外 如果參數(shù)是長參數(shù) 那么不能直接簡寫成 -vqrh 的形式 只能是 --help --file --nimei 這種形式。
- [FILE] 這個(gè)是參數(shù) 加上[]作用同上麦射。這個(gè)就像是 定義了一個(gè) str變量一樣蛾娶。 可以給str 賦值 后期可以取出來。
- 注意到 ... 了嗎潜秋? 這個(gè)的作用是讓前面一個(gè)參數(shù)重復(fù)多次蛔琅,最后以數(shù)組輸出。沒看懂沒關(guān)系一會看看最后的輸出就懂了峻呛。
- (-left | -right) 這個(gè)()的作用是說這里面必須要選擇一個(gè) 要么是 --right 要么是 --left罗售,注意 帶有()的是必須要選擇的。
好了钩述,現(xiàn)在按照上面的弄應(yīng)該是能寫出想要的指令了寨躁,然后去終端找到對應(yīng)的文件之后執(zhí)行一下指令吧。
如果指令正確那么就能輸出上面格式的內(nèi)容了牙勘,這個(gè)是以一個(gè)字典的形式來輸出的职恳。后期可以根據(jù)字典里面的各個(gè)數(shù)據(jù)來分別處理各種情況了。
另外上面還提到了一個(gè) ... 的問題 注意看看 上圖中的 FILE 對應(yīng)的是一個(gè)數(shù)組方面。所以 ... 的作用就是聲明 [FILE] 是一個(gè)數(shù)組 所以 可以添加多個(gè)放钦,輸出的是數(shù)組。
后續(xù):
1.只說明了基礎(chǔ)的用法恭金。
2.可能寫的不是那么清晰操禀。有不明白的可以留言。
3.點(diǎn)擊這個(gè)是我自己寫的 所有帶 zhang 前綴的是我自己復(fù)寫的横腿,有對應(yīng)的說明颓屑。