日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

click 简单易用的Python命令行

發(fā)布時(shí)間:2023/12/18 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 click 简单易用的Python命令行 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在之前的一篇文章中,我們使用了 argparse 來(lái)獲取命令行參數(shù)。這個(gè)模塊雖然可以出色地完成命令行任務(wù),但由于 argparse 是面向過(guò)程的,需要先設(shè)置解析器,再定義參數(shù),再解析命令行,最后實(shí)現(xiàn)業(yè)務(wù)邏輯。看著就已經(jīng)很復(fù)雜,對(duì)新手很不友好。

今天要介紹的 click 則是用一種簡(jiǎn)單易讀的方式來(lái)實(shí)現(xiàn)命令行。

一、click介紹

click 是一個(gè)以盡可能少的代碼、以組合的方式創(chuàng)建優(yōu)美的命令行程序的 Python 包。

它有如下三個(gè)特點(diǎn):

  • 任意嵌套命令?

  • 自動(dòng)生成幫助?

  • 支持運(yùn)行時(shí)延遲加載子命令

  • 二、快速開(kāi)始

    2.1 業(yè)務(wù)邏輯

    首先定義業(yè)務(wù)邏輯,在 argparse 中,業(yè)務(wù)邏輯是被放在最后一步,但 click 卻是放在第一步。

    我們來(lái)看下官方示例中 click 的用法和哲學(xué)。假設(shè)命令行程序的輸入是 name 和 count,功能是打印指定次數(shù)的名字。

    那么在 hello.py 中,很容易寫(xiě)出如下代碼:

    def hello(count, name):"""Simple program that greets NAME for a total of COUNT times."""for x in range(count):print('Hello %s!' % name)

    這段代碼的邏輯很簡(jiǎn)單,就是循環(huán) count 次,打印 name。

    2.2 定義參數(shù)

    然后,我們需要針對(duì) count 和 name 來(lái)定義它們所對(duì)應(yīng)的參數(shù)信息。

    • count 對(duì)應(yīng)為命令行選項(xiàng) --count,類型為數(shù)字,我們希望在不提供參數(shù)時(shí),其默認(rèn)值是 1

    • name 對(duì)應(yīng)為命令行選項(xiàng) --name,類型為字符串,我們希望在不提供參數(shù)時(shí),能給人提示使用 click,就可以寫(xiě)成下面這樣:

    from click import click@click.command() @click.option('--count', default=1, help='Number of greetings.') @click.option('--name', prompt='Your name', help='The person to greet.') def hello(count, name):...

    在上面的示例中:

    使用@click.command() 裝飾一個(gè)函數(shù),使之成為命令行接口

    使用@click.option() 等裝飾函數(shù),為其添加命令行選項(xiàng)

    對(duì)于 --count 來(lái)說(shuō),使用 default 來(lái)指定默認(rèn)值。而由于默認(rèn)值是數(shù)字,進(jìn)而暗示 --count 選項(xiàng)的類型為數(shù)字

    對(duì)于 --name 來(lái)說(shuō),使用 prompt 來(lái)指定未輸入該選項(xiàng)時(shí)的提示語(yǔ)

    不論是裝飾器的方式、還是各種默認(rèn)行為,click 都是像它的介紹所說(shuō)的那樣,讓人盡可能少地編寫(xiě)代碼,讓整個(gè)過(guò)程變得快速而有趣。

    2.3 代碼梳理

    使用 click 的方式非常簡(jiǎn)單,我們將上文的代碼匯總下,以有一個(gè)更清晰的認(rèn)識(shí):

    # hello.py import click@click.command() @click.option('--count', default=1, help='Number of greetings.') @click.option('--name', prompt='Your name', help='The person to greet.') def hello(count, name):"""Simple program that greets NAME for a total of COUNT times."""for x in range(count):click.echo('Hello %s!' % name)if __name__ == '__main__':hello()

    若我們指定次數(shù)和名字:

    $ python3 hello.py --count 2 --name Eric Hello Eric! Hello Eric!

    若我們什么都不指定,則會(huì)提示輸入名字,輸入后會(huì)默認(rèn)輸出一次:

    $ python3 hello.py Your name: Eric Hello Eric!

    我們還可以通過(guò) --help 參數(shù)查看自動(dòng)生成的幫助信息:

    Usage: hello.py [OPTIONS]Simple program that greets NAME for a total of COUNT times.Options:--count INTEGER Number of greetings.--name TEXT The person to greet.--help Show this message and exit.

    三、擴(kuò)展

    場(chǎng)景一:我們限定用戶輸入的值,那么就需要使用Click模塊中的Choice函數(shù),Choice的參數(shù)是一個(gè)列表,該列表中列出所有可能的值。

    import click@click.command() @click.option('-c',required=True,type=click.Choice(['start','stop'])) # 限定-c的值為start,或者stop,required表示是否為必填參數(shù) def getcommand(c):click.echo('command is %s' % c )if __name__ == '__main__':getcommand()

    場(chǎng)景二:應(yīng)用程序從命令行讀取密碼。

    使用標(biāo)準(zhǔn)庫(kù)中的argparse模塊只能像輸入普通參數(shù)一樣輸入密碼。這種方式存在一定安全隱患,例如輸入的密碼會(huì)保存在history中,查看命令歷史列表就能獲取密碼

    import click@click.command() @click.option('-p',prompt='Your Password',hide_input=True,confirmation_prompt=True)def getpassword(p):click.echo('Your Password is : %s' % p)if __name__ == '__main__':getpassword()

    在Click中,這個(gè)問(wèn)題就能完美的解決,只需要是這prompt為T(mén)rue,那么我們就能交互式輸入密碼,設(shè)置hide_input為T(mén)rue,就能隱藏密碼,設(shè)置confirmation_prompt為T(mén)rue,就可以進(jìn)行密碼的兩次驗(yàn)證,使用起來(lái)非常便捷。

    四、感慨

    從上面的例子來(lái)看,click 用法優(yōu)雅,令人迷醉,簡(jiǎn)直是 Pythonic 。作者思路清奇,直接將 click 通過(guò)裝飾器定義參數(shù)。讓我明白了什么叫縱享絲滑。

    ?

    參考資料:

    [1]HelloGitHub-Team 倉(cāng)庫(kù):?https://github.com/HelloGitHub-Team/Article

    [2]https://www.cnblogs.com/dachenzi/p/7995539.html

    掃碼關(guān)注,獲取精選資源

    總結(jié)

    以上是生活随笔為你收集整理的click 简单易用的Python命令行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。