1. 程式人生 > 其它 >option會觸發的click_基於Click模組開發命令列工具——入門篇

option會觸發的click_基於Click模組開發命令列工具——入門篇

技術標籤:option會觸發的click

為何需要引數

作為生信分析人員編寫 Python 指令碼的是常有的事。如果是一次性的指令碼,多數情況下只需保證準確和效率即可,其他的怎麼奔放怎麼來。但如果是反覆在同一個甚至是不同的流程中使用,就需要考慮從外部傳入引數了。而當開發者和使用者不是同一個人,就需要考慮為引數提供幫助資訊以及其他一些可能的高階功能。

最簡單的引數只需要 sys 模組下的 sys.argv 即可,它會返回一個列表。其中索引為 0 的是指令碼本身,其他元素依次為跟在指令碼檔名後的其他引數。

importsys
print(sys.argv[0],sys.argv[1],sys.argv[2])
490efed04d83d867caf914afed22d52b.png

為何需要 Click

如果需要更復雜一點呢?為了使得除你之外的指令碼使用者也可以正確使用,或者為了保證過了一段時間後你還能明白每個命令列引數的確切意義,就需要提供引數的幫助資訊。如果有一項引數的值大多情況下為同一個特定值,但是仍然存在必須自定義的場景,就需要為引數設定預設值。這個時候 sys 模組的引數功能就遠遠不夠用了,我們需要一款功能強大且使用簡單的 Python 模組。Click 模組正是這樣的選擇。

幾個簡單的例子

本文主要起到快速入門的作用,所以用幾個簡單且有遞進的例子帶你走近 Click 模組。

一個基礎的例子

importclick

@click.command()#這裡表明下面的函式是一條命令
@click.option("--name")#這裡新增一個引數,當它作為下面函式的引數時忽略“--”或“-”
defsay(name):
print("Mynameis"+name+".")

if__name__=="__main__":
say()
58af67ae5fb043fe921b261e4b4de33d.png

加上預設值和幫助資訊

importclick

@click.command()
@click.option("--name",help="Yourname",default="Jack")#help引數指定幫助資訊,default引數指定“--name”引數的預設值
defsay(name):
print("Mynameis"+name+".")

if__name__=="__main__":
say()
c8f2279d16003bdb9f6eedd7219736cc.png 當有預設值時,即使你沒有輸入對應的引數,指令碼也可以正常執行,並輸出預設值。

58fa5622a7374d01c1cada1360bfca8e.png執行指令碼時只需要新增“--help”即會輸出幫助資訊。

稍稍複雜一些

選項型別

選項的型別包括以下四種:str:字元,int:整數,float:浮點數,bool:布林值。設定選項型別主要有兩個好處:

一是幫助資訊輸出更快。當你使用“--help”輸出指令碼幫助資訊時。如果你沒有設定選項型別,Python 就會自動對型別進行推斷,以便在幫助資訊輸出對應的型別。上文中的程式碼並沒有設定型別,但是 Python 通過你的程式碼推斷出引數 name 為字元型別,最終幫助資訊中就顯示該選項為字元型別。上中文的示例指令碼極為簡單,所以即使沒設定選項型別,型別推斷也會很快。但是,當你的指令碼較為複雜時,就會消耗較長的時間進行型別推斷。實際使用過程中就會體現為,使用“--help”時,指令碼好一會兒才會輸出幫助資訊。

二是在少數情況下自動的型別推斷會出現錯誤,於是在將選項的值傳遞給函式時可能就會出現問題。

顯示預設值

可設定指令碼在輸出幫助資訊時顯示引數的預設值。

importclick

@click.command()
@click.option("--name",help="Yourname",default="Jack",
type=str,show_default=True)# type 引數指定“--name”引數的型別,show_default 設定是否顯示“--name”引數的預設值。
defsay(name):
print("Mynameis"+name+".")

if__name__=="__main__":
say()
3f1f62e0ad1e86021823c88f68561db8.png

預告

本文是《基於 Click 模組開發命令列工具》系列的首篇,後續將會推出系列文章,介紹更多的進階使用技巧。


注:各位小姐姐請注意今天的次條,這是我們鵲橋板塊推薦的第一位。