python包合集-argparse

2022-09-13 21:01:38

一、argparse簡介

  argparse 是 python 自帶的命令列引數解析包,可以用來方便的服務命令列引數,使用之前需要先匯入包 import argparse

二、簡單案例

  簡單使用,建立一個名為test.py的檔案

# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser()

# 新增一個接收引數,預設值為Se7eN
parser.add_argument("-n", "--name", default="Se7eN")

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

  列印結果為:

houlei@houleideMacBook-Pro argparse_demo % python3 test.py   # 此時在test.py後面沒有跟上引數,
args = Namespace(name='Se7eN')   # 所以列印出來的name為預設值 Se7eN

  再次驗證:

houlei@houleideMacBook-Pro argparse_demo % python3 test.py -n HOU   # 此時後面跟上了 -n 引數,並且賦值HOU
args = Namespace(name='HOU')  # 列印出來 name 的值為 HOU
houlei@houleideMacBook-Pro argparse_demo % python3 test.py --name hou  # 此時後面跟上了 --name 引數,並賦值為hou
args = Namespace(name='hou')  # 列印出來的 name 的值為 hou
houlei@houleideMacBook-Pro argparse_demo % 

  解釋說明

  在上述程式碼  parser.add_argument("-n", "--name", default="Se7eN") 中,有兩個引數 「-n」和「--name」 分別代表什麼?其中-n 和 --name 都是我們自己自定的引數名。至於n和name ,你可以隨便起個變數名都可以,但是要注意,前面的一個 「-」和「--」才是關鍵。

  一個「-」的引數,例如:-n, 他其實相當於我們在liunx中使用的指令,一個自定義的指令。

  兩個「--」的引數,例如:--name 他就相當於在程式中,用來接收對對應指令值的變數,例如我們在控制檯上輸入 python3 test.py -n hou。 其中 -n 就代表使用的 -n 的指令,然後將後面的 hou 的值賦值給對應的變數, -n 對應的變數就是 --name 。所以我們使用print 列印的時候才顯示的name = hou

  簡單理解:一個「-」的是指令,兩個「--」的是接收指令內容的變數。

 

三、ArgumentParser引數

  ArgumentParse是解析器物件,在建立一個解析器物件的時候,是有很多引數可以設定,下面就演示一下這些引數的使用

  1、prog: 程式的名稱(預設值:sys.argv[0])

# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser()

# 新增一個接收引數,預設值為Se7eN
parser.add_argument("-n", "--name", default="Se7eN")

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

  執行程式碼:

 

 

   修改程式碼繼續演示

# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname")    # 注意這裡新增了prog=testname

# 新增一個接收引數,預設值為Se7eN
parser.add_argument("-n", "--name", default="Se7eN")

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

 

 

 

 

  2、usage: 用來描述該程式的用途,並且會覆蓋原來的prog的顯示

  修改部分程式:

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組")

  展示結果

 

 

  

  3、description:幫助檔案的描述和uasge功能類似,只是顯示的位置不一樣

  繼續修改部分程式碼:

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似")

  展示結果

 

 

 

  4、epilog:幫助檔案的額外說明,位置在最下面

  繼續修改部分程式碼:

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明")

  展示結果:

 

 

   5、自定義指令的字首:預設是"-" 和 "--",這裡如果你不喜歡使用,也可以自通過該引數自己指定字首,個人覺得沒必要。

  程式碼演示:

# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件 ,並通過prefix_chars 指定指令的字首為 '+'
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明", prefix_chars='+')

# 新增一個接收引數,預設值為Se7eN,這裡的指令只能使用+ 表示,否則會報錯
parser.add_argument("+n", "++name", default="Se7eN")

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

  執行結果

 

 

 

四、add_argument指令引數解釋

    1、action: 的作用比較多,有儲存布林型別,常數型別,陣列型別的引數的功能

      注意1:使用action = store_true/store_false 時修飾的指令是不能賦值的,其對應的指令的值是布林型別的

      注意2:使用action = store_const 時修飾的指令的是不能賦值,其對應的指令的值常數型別

      注意3:使用action = append 是可以複製,其對應的值會將該指令對應的值放在一個陣列中

 

      1.1 先來演示:使用action,儲存布林型別的指令的值:store_true/store_false:儲存布林型別的變數:
# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明")

# 新增一個接收引數 -n,action = store_true 表示,在使用的時候,如果填寫了該指令,那麼該指令對應的值就是true,如果沒有使用該指令,則為空
parser.add_argument("-n", "--name", action='store_true')

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

  執行結果:

 

 

     

      1.2、使用action設定常數指令

    修改程式碼演示:

# 新增一個接收引數 -n,action = store_const 表示,在使用的時候,如果填寫了該指令,那麼該指就等於10 如果沒寫就等於空
parser.add_argument("-n", "--name", action='store_const',const=10)

    執行結果:

 

 

     

      1.3、使用action設定陣列型別的指令

    修改程式碼演示:

# 新增一個接收引數 -n,action = append, 會把該指令的值放在陣列中
parser.add_argument("-n", "--name", action='append')

    執行結果

 

 

 

    2、nargs引數:表示該指令接收值的個數:

      範例1:

import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明")

# 新增一個接收引數 -n, 並且該引數還必須要接收2個值,會放在一個陣列中,其中nargs等於幾,就表示要接受幾個引數
parser.add_argument("-n", "--name", nargs=2)

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

    執行結果:

 

 

     範例2:

# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明")

# 新增一個接收引數 -n,
# nargs = "?" :  表示只接收1個引數,正規表示式的寫法
# nargs = "+" :  表示接收1一個或多個引數
# nargs = "*" :  表示接收0個或者多個引數
parser.add_argument("-n", "--name", nargs="*")

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

    列印結果就不演示了

 

    3、required 該指令是必須的

# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明")

# 新增一個接收引數 -n,
# nargs = "?" :  表示只接收1個引數,正規表示式的寫法
# nargs = "+" :  表示接收1一個或多個引數
# nargs = "*" :  表示接收0個或者多個引數
parser.add_argument("-n", "--name", nargs="*", required=True)

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

    演示結果:

 

 

     

    4、choices:如有choices選項,則該指令的值只能是choices中的一個

    程式碼演示

# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明")

# 新增一個接收引數 -n,
# nargs = "?" :  表示只接收1個引數,正規表示式的寫法
# nargs = "+" :  表示接收1一個或多個引數
# nargs = "*" :  表示接收0個或者多個引數
parser.add_argument("-n", "--name", nargs="*", required=True, choices=['zhangsan', 'lisi'])

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

    執行結果:

 

 

五、vars()

  vars()方法可以將parser物件變成字典,方便使用

  程式碼演示

# 匯入 argparse 模組
import argparse

# 建立一個argparse 的物件
parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明")

# 新增一個接收引數 -n,
# nargs = "?" :  表示只接收1個引數,正規表示式的寫法
# nargs = "+" :  表示接收1一個或多個引數
# nargs = "*" :  表示接收0個或者多個引數
parser.add_argument("-n", "--name", nargs="*", required=True, choices=['zhangsan', 'lisi'])

# 獲取對應的引數的值
args = parser.parse_args()

# 控制檯列印出來接收到的值
print("args = {}".format(args))

# 將parser 變成字典物件
print('arg_vars = {}'.format(vars(args)))

  輸出結果: