首頁 > 軟體

Python 命令列解析工具 argparse基本用法

2022-12-25 14:01:27

在工作中,我們經常需要從命令列當中解析出指定的引數,而 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!


IT145.com E-mail:sddin#qq.com