日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

深入淺析Python 命令行模塊 Click

瀏覽:77日期:2022-08-02 16:33:28

Click 是用 Python 寫的一個第三方模塊,用于快速創(chuàng)建命令行。我們知道,Python 內(nèi)置了一個 Argparse 的標準庫用于創(chuàng)建命令行,但使用起來有些繁瑣,Click 相比于 Argparse,就好比 requests 相比于 urllib。

關(guān)于Click?

說下 Click 模塊是干啥的,簡單說,它就是把我們的 Python 腳本的一些函數(shù),通過添加帶有 Click 關(guān)鍵字的裝飾器進行裝飾進而將函數(shù)調(diào)用的形式轉(zhuǎn)化為命令行傳參的形式然后執(zhí)行。聽不懂也沒關(guān)系,我們會一步一步來,基本上按照我的實際應(yīng)用情況來寫的。 本文不會涉及太多復雜的語法和理論,將會用通俗的語言和大家進行分享。

安裝

python3 -m pip install click

一個簡單的例子

首先我們創(chuàng)建一個demo.py

import click #(1)@click.command() #(2)def main(): click.echo('hello click') #(3)if __name__ == ’__main__’: main()

裝飾器@click.command()會將我們的函數(shù)包裝成 click 對象,然后我們可以在函數(shù)中調(diào)用 click 的一些方法,常用的是click.echo,它的作用類似我們的 print,輸出用的。 通過命令行我們可以這樣運行這行代碼

python3 demo.py

好了,我們的第一個例子完事了,我們發(fā)現(xiàn)此時的代碼使用不使用 click好像沒什么區(qū)別。 接下來我們就要對它進行拓展了,如果我們需要傳入一個數(shù)字,然后打印這個時候,我們的代碼就可以這樣寫了。

傳入我們的第一個參數(shù)

import click@click.command()@click.option('-n', '--num', help='input a num')def main(num): click.echo(f'{num =}')if __name__ == ’__main__’: main()

這里我們前面代碼的基礎(chǔ)上給函數(shù) main 增加了 @click.option 裝飾器。

接下來說下這幾個參數(shù)的含義

-n:表示我們在命令行指定參數(shù)名的時候使用它即可,注意是一個短’-’--num:是第一個參數(shù)的完整名稱,我們在程序中接收值的時候使用它。注意是二個短’-’。help:在命令行輸入 'python3 demo.py --help' 的時候,它可以提示我們這個程序有哪些命令可以用。和我們使用命令行一個道理的。

然后我們的函數(shù)main的參數(shù)名就是,我們要接收的參數(shù)的完整名稱,同時通過click.echo打印出來。,f'{num=}' 是 Python 3.8 以后的語法糖,如果 num=3 那么它等價于 num = 3。 最后記得在 __main__ 里執(zhí)行我們的 main 方法。 好了,介紹完了代碼,我們可以運行了,運行示例:首先假設(shè)我們不知道它有幾個參數(shù)。

python3 demo.py --help

通過help我們可以得到如下信息

Usage: demo.py [OPTIONS]

Options: -n, --num TEXT input a num #這是定義該字段help的提示內(nèi)容 --help Show this message and exit.

Usage: 對應(yīng)我們當前文件名Options: 是一行一個參數(shù),一個參數(shù)分為-開頭的縮略參數(shù),和--開頭的完整參數(shù)名。 然后我們后面可以看到它的類型是 TEXT。緊接著就是該參數(shù)的提示信息,通過 help 我們可以設(shè)置。

python3 demo.py -n 3 #輸出 num =’3’或者 python3 demo.py --num 3 #輸出 num =’3’

上面兩者輸入方法是等價的使用哪個都行。

現(xiàn)在思考一個問題,如果我們需要 num 的值為數(shù)字類型的 3 怎么弄呢?

聲明參數(shù)類型

這里提供兩種方法(當然不僅兩種)

方法一:使用 type 關(guān)鍵字,type 就是 python 里的類型

@click.option('-n', '--num',type=int,help='input a num')

再次執(zhí)行代碼

python3 demo.py -n 4 #輸出 num =4

同時查看 help 信息的時候 TEXT 變?yōu)榱?INTEGER。

方法二:使用 default 關(guān)鍵字,指定默認值為 1

@click.option('-n', '--num',default=1,help='input a num')

將 default 的值設(shè)置為數(shù)字,我們的命令行就知道了我們的參數(shù)類型為 int, 這里處理指定了參數(shù)類型,還設(shè)定了默認值。設(shè)定為默認值的參數(shù),可以不指定其值,這時候會使用默認值。 如果我們使用 help 查看信息會發(fā)現(xiàn)和上面的方法一沒什么區(qū)別的。這時候我們可以通過指定另外一個關(guān)鍵字,讓它在 help 信息里顯示默認值

@click.option('-n', '--num',default=1,help='input a num',show_default=True)

通過加入 show_default 我們可以讓 default 的值在 help 信息中顯示了,內(nèi)容格式如下:

Usage: demo.py [OPTIONS]

Options: -n, --num INTEGER input a num [default: 1] --help Show this message and exit.

再加一個參數(shù)

在上面代碼的基礎(chǔ)上對代碼進行部分修改,主要是新添加一個參數(shù) id。

import click@click.command()@click.option('-i', '--id', required=True, help='input an id')@click.option('-n', '--num', type=int, help='input a number', show_default=True)def main(id, num): click.echo(f'your {id=} {num=}')if __name__ == ’__main__’: main()

給之前的函數(shù)再添加 @click.option裝飾器即可。 這里我添加了的參數(shù)為 id ,因為一般情況下 id 是不能為空的,所以我們就可以通過required = True對它進行限制,表示該參數(shù)為必傳參數(shù)。如果不傳就出現(xiàn)錯誤

python3 demo.py -n 1234 #沒給id傳參,出現(xiàn)錯誤,提示缺少參數(shù)。Usage: demo.py [OPTIONS]Try 'demo.py --help' for help.

Error: Missing option '-i' / '--id'.

正確的使用方法應(yīng)該是

python3 demo.py -i 1 -n 1234

到目前為止一個簡答的命令行工具就生成了。接下來說下我用它做過什么事情。

處理實際問題

現(xiàn)在我們有個需求,根據(jù)用戶名去 mongo 數(shù)據(jù)庫中查找對應(yīng)的用戶登錄信息,最終的生成信息格式如下:不好意思人太多了,讓您久等了,您的信息來了!**************************************************用戶名:lisa密碼: 1234qwer登錄網(wǎng)站: http://www.xxxx.com**************************************************️目前密碼唯一的不要修改哦!該條消息不用回復了,謝謝。

一開始我是通過在 python 腳本中加個配置文件,然后通過配置文件的形式進行用戶名的修改,但是這種方式不靈活,每次都需要重新運行 Python 代碼。或者我們還可以使用 fastapi搭建一個RESTful api的服務(wù),但是我的懶得搭這個服務(wù)。最終我選擇使用命令行的形式去運行。使用的模塊就是今天說的這個 click 模塊。 接下來寫一段需要代碼:

@click.command()@click.option(’-u’, ’--user_name’, type=str, help=’search user_name’)def main(user_name): click.echo(f’search user:{user_name}’) result = m.get_user_info(user_name) #數(shù)據(jù)庫查詢 try: info = f'不好意思人太多了,讓您久等了,您的信息來了!n{’*’ * 50}n用戶名: {result.get(’user_name’)}n' f'密碼: {result.get(’user_pwd’)}n登錄網(wǎng)站: {result.get(’url’)}n{’*’ * 50}️n目前密碼唯一的不要修改哦!n該條消息不用回復了,謝謝。' except Exception as e: info = 'Not Found' click.echo(info)if __name__ == ’__main__’: main()

通過上面的碼我們就可以通過命令行的形式進行查詢了。

python3 demo.py -u 1234

非常的方便。 如果這個時候,我需要一個臨時添加用戶的功能,就需要重新寫一個函數(shù)了, 然后我們在命令行中如何控制兩個函數(shù)的運行呢?這就是接下來要說的組。

創(chuàng)建組的形式

所謂的創(chuàng)建組,就是通過一個主入口函數(shù),去關(guān)聯(lián)其他的函數(shù),然后其他的函數(shù)名可以作為命令直接使用。 好了首先創(chuàng)建一個主入口函數(shù)

@click.group()def main(): pass

這個時候我們發(fā)現(xiàn) main 上面的裝飾器變?yōu)榱薂click.group()。 我們通過它準備創(chuàng)建一個命令行組。接下來我們開始創(chuàng)建組成員,所謂的組成員就是一個函數(shù)。

@main.command()@click.option(’-u’, ’--user_name’, type=str, help=’add user_name’)def get_user(user_name): click.echo(f’search user:{user_name}’)

這個組成員的作用和它的函數(shù)名是一樣的就是查詢用戶信息。 這里需要注意的是組成員的裝飾器由原來的@click.command變?yōu)榱薂main.command。main 就是上面 main 方法名。然后同樣下面的 option 是聲明一些參數(shù)。 接下來我們創(chuàng)建第二個組成員,用來添加用戶信息。

@main.command()@click.option(’-u’, ’--user_name’, required=True, type=str, help='要添加的用戶名')@click.option(’-p’, ’--password’, required=True, type=str, help='要添加的密碼')@click.option(’-t’, ’--id_type’, required=True, default='phone', type=str, help='添加的賬戶類型',show_default=True)def add_user(user_name, password, id_type): #do something..... click.echo(f'{user_name=} {password=} {id_type=}')

首先通過@main.command()將它加入到組。然后就是 option 一系列添加參數(shù)的操作。這個具體的參數(shù)信息上面都說了這里就不提了。好了我們就創(chuàng)建這兩個成員, 如果需要其他的功能,比如說刪除用戶,可以繼續(xù)添加一個 delete_user 函數(shù),以此類推。

下面我就說下如何執(zhí)行上面的兩個成員函數(shù)。

首先,先看下它的 help 命令,都有什么內(nèi)容,一般不知道一個命令行應(yīng)用有什么命令參數(shù)的我時候我們可以使用它。

python3 demo.py --help

輸出以下內(nèi)容

Usage: demo.py [OPTIONS] COMMAND [ARGS]...

Options: --help Show this message and exit.

Commands: add-user get-user

其中 Commands 就是我們的成員函數(shù)的調(diào)用命令,需要注意一下它將函數(shù)原來的'_'變?yōu)榱恕?”。 然后我們就可以調(diào)用查詢方法了

python3 demo.py get-user -u 123

然后我們就可以得到結(jié)果

search user:123

同樣的調(diào)用添加用戶信息的方法。

python3 demo.py add-user -u 123 -p '1234qwer'

因為-t不是必傳參數(shù)所以我們可以忽略,使用默認值'phone'。 好了,這就是今天要說的內(nèi)容,基本上夠日常操作了。

更多內(nèi)容,感興趣的朋友可以參考官方文檔。

到此這篇關(guān)于深入淺析Python 命令行模塊 Click的文章就介紹到這了,更多相關(guān)Python 命令行模塊 Click內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久大逼视频| 日韩av二区| 香蕉久久精品| 日韩欧美另类一区二区| 国产一区二区三区亚洲| av一区二区高清| 快播电影网址老女人久久| 91精品一区| 国产伊人久久| 福利精品一区| 免费av一区二区三区四区| 亚洲精品韩国| 精品国产乱码久久久久久1区2匹| 国产精品久久久久久久久久久久久久久| 欧美亚洲自偷自偷| 国产日产高清欧美一区二区三区| 欧美三区不卡| 高清一区二区三区| 日韩欧美一区二区三区在线观看 | 蜜桃一区二区三区在线观看| 亚洲一区二区三区在线免费| 日韩一二三区在线观看| 国产欧美69| 欧美亚洲人成在线| 美女视频网站久久| 亚洲午夜久久久久久尤物| 首页国产欧美久久| 国产精品高潮呻吟久久久久| 日韩中文影院| 免费久久精品视频| 毛片不卡一区二区| 影视先锋久久| 青青国产精品| 欧美成人a交片免费看| 亚洲精品2区| 日韩精品免费观看视频| 欧美成人aaa| 1024精品一区二区三区| 亚洲精品三级| 国产成人精品福利| 欧美日韩免费观看一区=区三区 | 日韩三级视频| 久久久免费人体| 亚洲精品综合| 亚洲一区二区三区高清| 久久亚洲在线| 狠狠操综合网| 久久都是精品| 亚洲欧美日韩精品一区二区| 丝袜美腿一区二区三区| 欧美日韩一二| 日韩激情网站| 色爱av综合网| 国产亚洲高清在线观看| 久久九九精品| 国产精品日本一区二区不卡视频| 亚洲二区免费| 国产伦精品一区二区三区千人斩 | 香蕉久久久久久| av中文字幕在线观看第一页| 日韩专区在线视频| 精品国产乱码久久久| 一区在线免费| 福利片在线一区二区| 亚洲丝袜美腿一区| 日韩天堂在线| 欧美在线看片| 欧美日韩国产综合网| 精品视频自拍| 天海翼精品一区二区三区| 日韩精品一区二区三区免费观看| 日韩av黄色在线| 婷婷成人基地| 国产精品2023| 蜜桃一区二区三区在线| 伊人久久在线| 国产精品欧美日韩一区| 黄色亚洲免费| 国产精品毛片久久| 日本精品另类| 伊人久久大香线蕉av超碰演员| 国产91在线精品| 欧美日本三区| 在线看片一区| 日韩午夜av在线| 日韩在线精品| 中文字幕一区二区三区四区久久| 麻豆国产91在线播放| 亚洲精品系列| 精品国产三区在线| 婷婷视频一区二区三区| 久久婷婷一区| 亚洲欧美在线综合| 美女91精品| 影音先锋国产精品| av免费不卡国产观看| 激情婷婷亚洲| 国产资源在线观看入口av| 国产精品美女午夜爽爽| 麻豆久久精品| 午夜精品一区二区三区国产| 日韩高清中文字幕一区二区| 精品免费视频| 国产精品任我爽爆在线播放| 日韩福利视频网| 国产亚洲高清视频| 欧美日中文字幕| 精品国产aⅴ| 国产精品高潮呻吟久久久久| 奇米狠狠一区二区三区| 婷婷精品在线| 亚洲一二av| 最近国产精品视频| 中文字幕一区二区精品区| 免费人成在线不卡| 久久国产99| 91久久中文| 国产亚洲亚洲| 国产亚洲激情| 羞羞答答国产精品www一本| 99视频一区| 视频一区欧美精品| 免费日本视频一区| 亚洲人成网77777色在线播放| 久久国产精品毛片| 手机精品视频在线观看| 最新国产精品视频| 亚洲精品大全| 久久国产尿小便嘘嘘| 国产精区一区二区| 久久精品福利| 天堂а√在线最新版中文在线| 波多视频一区| 久久影视一区| 西西人体一区二区| 婷婷综合电影| 国产精品xxx| 亚洲性视频h| 亚洲人成在线影院| 神马久久午夜| 亚洲作爱视频| 一级成人国产| 国产日韩欧美一区二区三区在线观看 | 久久国产电影| 日本午夜精品久久久| 正在播放日韩精品| 五月激情久久| 红桃视频国产精品| 亚洲色图综合| 日韩和欧美一区二区| 捆绑调教美女网站视频一区 | 国产一区二区精品久| 99视频精品视频高清免费| 久久国产高清| 国产精品99精品一区二区三区∴| 91看片一区| 日韩制服丝袜先锋影音| 国产精品久久久久久久久久齐齐| 色婷婷综合网| 日韩视频一区二区三区在线播放免费观看| 日韩精品一卡二卡三卡四卡无卡| 欧美自拍一区| 久久亚洲精精品中文字幕| 99久久99视频只有精品| 亚洲久久视频| 日韩1区在线| 日韩在线观看一区二区| 精品一区二区三区亚洲| 99热精品在线| 国产精品超碰| 国产精品av一区二区| 日韩av一区二区三区| 天堂av在线| 日韩有吗在线观看| 日韩一区自拍| 五月国产精品| 日韩一区电影| 午夜亚洲福利在线老司机| 国产精品网址| 欧美日韩国产一区精品一区| 国产精品伦一区二区| 欧美精品激情| 精品国产一区二区三区av片| 国产精品久久久免费| 国产精品亚洲人成在99www| 国产精品调教视频| 蜜臀av一区二区三区| 亚洲伊人精品酒店| 日本午夜免费一区二区| 欧美日本久久| 久久精品人人| 欧美精品日日操| 久久香蕉国产| 1024精品久久久久久久久| 亚洲欧美日本日韩| 精品久久在线| 亚洲九九精品| 特黄特色欧美大片| 国产精品一区高清| 久久www成人_看片免费不卡|