<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在工作中,我們經常需要從命令列當中解析出指定的引數,而 Python 也提供了相應的標準庫來做這件事情,比如 sys, optparse, getopt, argparse。這裡面功能最強大的莫過於 argparse,下面就來看看它用法。
import argparse # 使用 argparse 分為以下幾步 # 1. 建立命令列解析器物件 parse = argparse.ArgumentParser( description="這是命令列解析器" ) # 2.給解析器新增命令列引數,可以新增任意個 parse.add_argument("-n", dest="name") # 3. 從命令中將引數解析出來 args = parse.parse_args() # 然後通過 args 便可以拿到相應的引數值 print(args.name)
我們執行一下看看,當前檔案叫做 tools.py。
本文由技術群粉絲投稿分享,專案原始碼、資料、技術交流提升,均可加交流群獲取,群友已超過2000人,新增時最好的備註方式為:來源+興趣方向,方便找到志同道合的朋友
怎麼樣,是不是很簡單呢?所以我們的重點就在 add_argument 方法上面,來看看它都支援哪些引數。
import argparse parse = argparse.ArgumentParser() # 這裡出現了 "-n" 和 "--name" # 在命令列中可以通過 '-n 古明地覺' 或者 '--name 古明地覺' 進行指定 # 兩者的含義是一樣的,但 - 後面一般跟短引數,-- 後面跟長引數 # 然後是 dest,它表示獲取相關引數值時,使用的名稱 parse.add_argument("-n", "--name", dest="name") # 這裡只有一個短引數,那麼在命令列中需要通過 -a 來指定 parse.add_argument("-a", dest="age") # 這裡只有一個長引數,那麼在命令列中需要通過 --gender 來指定 parse.add_argument("--gender", dest="gender") args = parse.parse_args() print(f"name: {args.name}, age: {args.age}, gender: {args.gender}")
我們來試一下:
還是很簡單的,一個 - 後面跟的是短引數,兩個 - 後面跟的是長引數。在命令列中通過 - 或者 – 進行指定,解析完畢之後再通過 dest 引數指定的名字進行獲取。
另外,雖然 - 後面跟短引數,-- 後面跟長引數,但我們這樣寫也是可以的。
parse.add_argument("-name", "--n", dest="name")
只不過這種寫法比較怪異,應該寫成 --name 和 -n,一個橫槓後面是短引數,兩個是長引數。
然後這些引數都是可以不指定的,會使用預設值 None。
如果我希望它是必傳引數,該怎麼辦呢?
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}")
我們看到當 host 不指定的時候,就會報錯。並且我們還通過 default 引數指定了預設值。
然後是引數值的型別,不管什麼引數,只要我們在命令列當中傳遞了,那麼解析出來的預設都是字串型別。
import argparse parse = argparse.ArgumentParser() parse.add_argument("-p", dest="port", default=6379) args = parse.parse_args() print(f"port 型別: {args.port.__class__}")
那麼可不可以指定引數的型別呢?答案是可以的。
import argparse parse = argparse.ArgumentParser() parse.add_argument("-p", dest="port", type=int) args = parse.parse_args() print(f"port 型別: {args.port.__class__}")
通過指定 type 為 int,那麼在將引數值解析出來之後就會呼叫 int 進行轉化,轉化失敗則報錯。
同理,我們也可以換成其它型別,舉個例子。
還是很簡單的,甚至換成我們自定義的類,或者一個函數也是可以的,
此時我們就實現了給一個引數傳遞多個值,不過這種做法屬於是曲線救國,我們應該通過另一個引數實現。
nargs 指定為 *,那麼表示 --hobby 可以接收多個值,並且值之間使用空格進行分隔,最終會得到一個列表。如果指定 --hobby,但是不傳值,那麼會得到空列表。
以上就是 argparse 的基本用法,更多內容可以參考官方檔案。
到此這篇關於Python 命令列解析工具 argparse很好用的文章就介紹到這了,更多相關Python argparse內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45