Python?命令行解析工具?argparse基本用法
在工作中,我們經(jīng)常需要從命令行當(dāng)中解析出指定的參數(shù),而 Python 也提供了相應(yīng)的標(biāo)準(zhǔn)庫(kù)來(lái)做這件事情,比如 sys, optparse, getopt, argparse。這里面功能最強(qiáng)大的莫過(guò)于 argparse,下面就來(lái)看看它用法。
import argparse # 使用 argparse 分為以下幾步 # 1. 創(chuàng)建命令行解析器對(duì)象 parse = argparse.ArgumentParser( description="這是命令行解析器" ) # 2.給解析器添加命令行參數(shù),可以添加任意個(gè) parse.add_argument("-n", dest="name") # 3. 從命令中將參數(shù)解析出來(lái) args = parse.parse_args() # 然后通過(guò) args 便可以拿到相應(yīng)的參數(shù)值 print(args.name)
我們執(zhí)行一下看看,當(dāng)前文件叫做 tools.py。
技術(shù)提升
本文由技術(shù)群粉絲投稿分享,項(xiàng)目源碼、數(shù)據(jù)、技術(shù)交流提升,均可加交流群獲取,群友已超過(guò)2000人,添加時(shí)最好的備注方式為:來(lái)源+興趣方向,方便找到志同道合的朋友
怎么樣,是不是很簡(jiǎn)單呢?所以我們的重點(diǎn)就在 add_argument 方法上面,來(lái)看看它都支持哪些參數(shù)。
import argparse parse = argparse.ArgumentParser() # 這里出現(xiàn)了 "-n" 和 "--name" # 在命令行中可以通過(guò) '-n 古明地覺(jué)' 或者 '--name 古明地覺(jué)' 進(jìn)行指定 # 兩者的含義是一樣的,但 - 后面一般跟短參數(shù),-- 后面跟長(zhǎng)參數(shù) # 然后是 dest,它表示獲取相關(guān)參數(shù)值時(shí),使用的名稱(chēng) parse.add_argument("-n", "--name", dest="name") # 這里只有一個(gè)短參數(shù),那么在命令行中需要通過(guò) -a 來(lái)指定 parse.add_argument("-a", dest="age") # 這里只有一個(gè)長(zhǎng)參數(shù),那么在命令行中需要通過(guò) --gender 來(lái)指定 parse.add_argument("--gender", dest="gender") args = parse.parse_args() print(f"name: {args.name}, age: {args.age}, gender: {args.gender}")
我們來(lái)試一下:
還是很簡(jiǎn)單的,一個(gè) - 后面跟的是短參數(shù),兩個(gè) - 后面跟的是長(zhǎng)參數(shù)。在命令行中通過(guò) - 或者 – 進(jìn)行指定,解析完畢之后再通過(guò) dest 參數(shù)指定的名字進(jìn)行獲取。
另外,雖然 - 后面跟短參數(shù),-- 后面跟長(zhǎng)參數(shù),但我們這樣寫(xiě)也是可以的。
parse.add_argument("-name", "--n", dest="name")
只不過(guò)這種寫(xiě)法比較怪異,應(yīng)該寫(xiě)成 --name 和 -n,一個(gè)橫杠后面是短參數(shù),兩個(gè)是長(zhǎng)參數(shù)。
然后這些參數(shù)都是可以不指定的,會(huì)使用默認(rèn)值 None。
如果我希望它是必傳參數(shù),該怎么辦呢?
import argparse parse = argparse.ArgumentParser() parse.add_argument("--host", dest="host", required=True) parse.add_argument("-p", dest="port", default=6379) args = parse.parse_args() print(f"host: {args.host}, port: {args.port}")
我們看到當(dāng) host 不指定的時(shí)候,就會(huì)報(bào)錯(cuò)。并且我們還通過(guò) default 參數(shù)指定了默認(rèn)值。
然后是參數(shù)值的類(lèi)型,不管什么參數(shù),只要我們?cè)诿钚挟?dāng)中傳遞了,那么解析出來(lái)的默認(rèn)都是字符串類(lèi)型。
import argparse parse = argparse.ArgumentParser() parse.add_argument("-p", dest="port", default=6379) args = parse.parse_args() print(f"port 類(lèi)型: {args.port.__class__}")
那么可不可以指定參數(shù)的類(lèi)型呢?答案是可以的。
import argparse parse = argparse.ArgumentParser() parse.add_argument("-p", dest="port", type=int) args = parse.parse_args() print(f"port 類(lèi)型: {args.port.__class__}")
通過(guò)指定 type 為 int,那么在將參數(shù)值解析出來(lái)之后就會(huì)調(diào)用 int 進(jìn)行轉(zhuǎn)化,轉(zhuǎn)化失敗則報(bào)錯(cuò)。
同理,我們也可以換成其它類(lèi)型,舉個(gè)例子。
還是很簡(jiǎn)單的,甚至換成我們自定義的類(lèi),或者一個(gè)函數(shù)也是可以的,
此時(shí)我們就實(shí)現(xiàn)了給一個(gè)參數(shù)傳遞多個(gè)值,不過(guò)這種做法屬于是曲線(xiàn)救國(guó),我們應(yīng)該通過(guò)另一個(gè)參數(shù)實(shí)現(xiàn)。
nargs 指定為 *,那么表示 --hobby 可以接收多個(gè)值,并且值之間使用空格進(jìn)行分隔,最終會(huì)得到一個(gè)列表。如果指定 --hobby,但是不傳值,那么會(huì)得到空列表。
以上就是 argparse 的基本用法,更多內(nèi)容可以參考官方文檔。
到此這篇關(guān)于Python 命令行解析工具 argparse很好用的文章就介紹到這了,更多相關(guān)Python argparse內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)敵人精靈篇
相信大多數(shù)8090后都玩過(guò)太空射擊游戲,在過(guò)去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫(xiě)學(xué)習(xí)中回顧過(guò)往展望未來(lái),下面開(kāi)始講解敵人精靈的使用2022-08-08Python筆記之a(chǎn) = [0]*x格式的含義及說(shuō)明
這篇文章主要介紹了Python筆記之a(chǎn) = [0]*x格式的含義及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05用python獲取txt文件中關(guān)鍵字的數(shù)量
這篇文章主要介紹了如何用python獲取txt文件中關(guān)鍵字的數(shù)量,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作
這篇文章主要介紹了自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05終于明白tf.reduce_sum()函數(shù)和tf.reduce_mean()函數(shù)用法
這篇文章主要介紹了終于明白tf.reduce_sum()函數(shù)和tf.reduce_mean()函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Python Flask搭建yolov3目標(biāo)檢測(cè)系統(tǒng)詳解流程
YOLOv3沒(méi)有太多的創(chuàng)新,主要是借鑒一些好的方案融合到Y(jié)OLO里面。不過(guò)效果還是不錯(cuò)的,在保持速度優(yōu)勢(shì)的前提下,提升了預(yù)測(cè)精度,尤其是加強(qiáng)了對(duì)小物體的識(shí)別能力2021-11-11Python json讀寫(xiě)方式和字典相互轉(zhuǎn)化
這篇文章主要介紹了Python json讀寫(xiě)方式和字典相互轉(zhuǎn)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04python3實(shí)現(xiàn)隨機(jī)數(shù)
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)隨機(jī)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06