Python-腳本轉(zhuǎn)換命令行效率神器Click

作者:Jackpop
鏈接:https://www.zhihu.com/question/24590883/answer/709395848
來源:知乎
著作權(quán)歸作者所有顾腊。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處挖胃。

官方文檔:https://click.palletsprojects.com/en/7.x/

Click的開發(fā)初衷就是使用最少的代碼杂靶,以一種可組合的方式創(chuàng)建漂亮的命令行接口。它的目的是使編寫命令行工具的過程快速而有趣酱鸭,同時(shí)防止由于無法實(shí)現(xiàn)預(yù)期的CLI API而導(dǎo)致的任何問題吗垮。Click主要有以下3個(gè)亮點(diǎn):命令的任意嵌套自動(dòng)幫助頁面生成支
持在運(yùn)行時(shí)延遲加載子命令安裝$ pip install clickClick支持Python 3.4和更新版本、Python 2.7和PyPy凹髓。首先先來一個(gè)例子烁登,

import click
?
?
@click.command()
@click.option("--name", default="li", help="your name")
@click.option("--age", default=26, help="your age")
def hello_world(name, age):
    click.echo(name)
    print(age)

hello_world()命令行調(diào)用,$ python test.py --name ll --age 27

輸出

ll
27

可以看出蔚舀,上述主要用了click的3個(gè)方法饵沧,分別是锨络,commandoptionecho這3個(gè)方法在Click工具中至關(guān)重要,除此之外還有其他的方法狼牺,它們的功能分別是羡儿,方法功能
command:用于裝飾一個(gè)函數(shù),使得該函數(shù)作為命令行的接口是钥,例如上述裝飾hello_world
option:用于裝飾一個(gè)函數(shù)掠归,主要功能是為命令行添加選項(xiàng)
echo:用于輸出結(jié)果,由于print函數(shù)在2.x和3.x之間存在不同之處悄泥,為了更好的兼容性虏冻,因此提供了echo輸出方法
Choice:輸入為一個(gè)列表,列表中為選項(xiàng)可選擇的值把上述程序的幫助信息輸出

$ python test.py --help
Usage: test.py [OPTIONS]
?
Options:
  --name TEXT    your name
  --age INTEGER  your age
  --help         Show this message and exit.

在示例程序中码泞,對(duì)于option只使用了default、help兩個(gè)屬性狼犯,除此之外option還有其他的屬性選項(xiàng)余寥,它們的功能如下,屬性描述default:給命令行選項(xiàng)添加默認(rèn)值help:給命令行選項(xiàng)添加幫助信息type:指定參數(shù)的數(shù)據(jù)類型悯森,例如int宋舷、str、floatrequired:是否為必填選項(xiàng)瓢姻,True為必填祝蝠,F(xiàn)alse為非必填prompt:在命令行提示用戶輸入對(duì)應(yīng)選項(xiàng)的信息nargs:指定命令行選項(xiàng)接收參數(shù)的個(gè)數(shù),如果超過則會(huì)報(bào)錯(cuò)除此之外幻碱,Click還提供了group方法绎狭,該方法可以添加多個(gè)子命令,

import click
?
?
@click.group()
def first():
    print("hello world")
?
@click.command()
@click.option("--name", help="the name")
def second(name):
    print("this is second: {}".format(name))
?
@click.command()
def third():
    print("this is third")
?
first.add_command(second)
first.add_command(third)

first()調(diào)用子命令second褥傍,$ python test.py second --name hh

輸出

hello world
this is second: hh
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末儡嘶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恍风,更是在濱河造成了極大的恐慌蹦狂,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朋贬,死亡現(xiàn)場離奇詭異凯楔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锦募,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門摆屯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糠亩,你說我怎么就攤上這事鸥拧〉吃叮” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵富弦,是天一觀的道長沟娱。 經(jīng)常有香客問我,道長腕柜,這世上最難降的妖魔是什么济似? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮盏缤,結(jié)果婚禮上砰蠢,老公的妹妹穿的比我還像新娘。我一直安慰自己唉铜,他們只是感情好台舱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潭流,像睡著了一般竞惋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灰嫉,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天拆宛,我揣著相機(jī)與錄音,去河邊找鬼讼撒。 笑死浑厚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的根盒。 我是一名探鬼主播钳幅,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼炎滞!你這毒婦竟也來了贡这?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤厂榛,失蹤者是張志新(化名)和其女友劉穎盖矫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體击奶,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辈双,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柜砾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湃望。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出证芭,到底是詐尸還是另有隱情瞳浦,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布废士,位于F島的核電站叫潦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏官硝。R本人自食惡果不足惜矗蕊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氢架。 院中可真熱鬧傻咖,春花似錦、人聲如沸岖研。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孙援。三九已至害淤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赃磨,已是汗流浹背筝家。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工洼裤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邻辉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓腮鞍,卻偏偏與公主長得像值骇,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子移国,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348