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ī)則也寫了,對(duì)!docopt就是要讓你這么吊~ (翻譯的不對(duì)?)
看了上面的這段話我也是深深的震精了? 什么? 注釋都能用在程序里面? 合理嗎? 于是自己還是去探究了一下如下函數(shù):
也就是說 這個(gè)函數(shù)里面的注釋能通過一個(gè)doc 參數(shù)打印出來,當(dāng)然要是這個(gè)是整個(gè)文檔的說明,那么打印的就是文檔對(duì)應(yīng)的doc 這里就不測(cè)試了,下面的就是這樣的例子。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 下面是對(duì)參數(shù)的說明:
-h --help 這兩個(gè)沒什么卵區(qū)別,中間可以使 空格也可以是 逗號(hào)!如果是 長指令 前面是用 -- (例如 --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)系一會(huì)看看最后的輸出就懂了。
- (-left | -right) 這個(gè)()的作用是說這里面必須要選擇一個(gè) 要么是 --right 要么是 --left,注意 帶有()的是必須要選擇的。
好了,現(xiàn)在按照上面的弄應(yīng)該是能寫出想要的指令了,然后去終端找到對(duì)應(yīng)的文件之后執(zhí)行一下指令吧。
如果指令正確那么就能輸出上面格式的內(nèi)容了,這個(gè)是以一個(gè)字典的形式來輸出的。后期可以根據(jù)字典里面的各個(gè)數(shù)據(jù)來分別處理各種情況了。
另外上面還提到了一個(gè) ... 的問題 注意看看 上圖中的 FILE 對(duì)應(yīng)的是一個(gè)數(shù)組。所以 ... 的作用就是聲明 [FILE] 是一個(gè)數(shù)組 所以 可以添加多個(gè),輸出的是數(shù)組。
后續(xù):
1.只說明了基礎(chǔ)的用法。
2.可能寫的不是那么清晰。有不明白的可以留言。
3.點(diǎn)擊這個(gè)是我自己寫的 所有帶 zhang 前綴的是我自己復(fù)寫的,有對(duì)應(yīng)的說明。