argparse模塊-命令行讀取參數


前言:最近遇到了argparse模塊的使用,一開始的時候一臉懵逼,於是找了資料終於是明白了一點,記錄在下,如有錯誤,希望得到指正。

認識:

          舉一個小例子,在命令行窗口輸入python,我們可以查詢到相關的python信息,但是如果我們想要進一步查看python的版本信息,那我們需要輸入   python --version   ,在里  --version 被稱為可選參數,我們指定了 --version 這個參數,所以最后僅僅輸出python的版本信息。

         在多個文件或者不同語言協同的項目中,python腳本經常需要從命令行直接讀取參數。這個時候argparse模塊就提供了極大地便利,比如說python腳本需要多個參數,並且每 個參數的類型不盡相同,這個時候我們就可以很方便的通過argparse模塊來進行設置傳遞不同的參數。

一般步驟:

1. 導入argparse模塊

             使用 import argparse 來導入模塊

2. 創建ArgumentParser() 對象

             parser = argparse.ArgumentParser()  

             parser為創建的新對象

3. 調用 add_argument() 方法添加參數

             parser.add_argument()  

             在此函數可以對參數進行設置,比如說種類,默認值等等,下面我們會詳細探討

4. 使用 parse_args() 解析添加的參數

             args = parser.parse_args()

             args是一個namespace空間,解析的參數保存在里面

具體代碼舉例:

一般情況

將下面代碼保存為parser.py

                  

import argparse

parser = argparse.ArgumentParser()
#分別增加兩個可選參數para1、para2,類型為int
parser.add_argument('--para1', type=int, help='display an para1')
parser.add_argument('--para2', type=int, help='display an para2')
args = parser.parse_args()

if args.para1:
    print(args.para1)
else:
    print(args.para2)

運行的命令及結果:

#運行
python parser.py
#結果
None
#-----------------------------------------------------
#運行
python parser.py -h
#結果
usage: parser.py [-h] [--para1 PARA1] [--para2 PARA2]

optional arguments:
  -h, --help     show this help message and exit
  --para1 PARA1  display an para1
  --para2 PARA2  display an para2
#-----------------------------------------------------
#運行
python parser.py --para1 10
#結果
10
#-----------------------------------------------------
#運行
python parser.py --para2 50
#結果
50
#-----------------------------------------------------
#運行
python parser.py 10
#結果
usage: parser.py [-h] [--para1 PARA1] [--para2 PARA2]
parser.py: error: unrecognized arguments: 10
#-----------------------------------------------------

----------------------------------------------------------------------------------------------------

第一個輸出None, 是因為我們並沒有傳入任何參數

----------------------------------------------------------------------------------------------------

第二個-h可以認為是自帶的可選參數,輸出我們增加的參數的所有信息

----------------------------------------------------------------------------------------------------

第三個我們輸入 --para1 10, 意思是我們將10這個參數作為鍵值傳入給para1存在args字典中

----------------------------------------------------------------------------------------------------

第四個我們輸入 --para2 50, 意思是我們將50這個參數作為鍵值傳入給para2存在args字典中

----------------------------------------------------------------------------------------------------

第五個輸出error,是因為我們只輸入了一個值,但是卻沒有指定這個值屬於哪個參數,因而出錯

----------------------------------------------------------------------------------------------------

必需參數

確保某些必需的參數有輸入,我們將增加para1參數的代碼改為如下所示

parser.add_argument('--para1', type=int, required=True, help='display an para1')

所得結果為:

usage: parser.py [-h] --para1 PARA1 [--para2 PARA2]
parser.py: error: the following arguments are required: --para1

位置參數:

位置參數沒有 -- 標簽,一般按照輸入的先后順序進行賦值,並且如果沒有賦值或者賦值數量不夠都會報錯

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('para1', type=int, help='display an para1')
parser.add_argument('para2', type=int, help='display an para2')
args = parser.parse_args()

print('para1 is %d'%(args.para1))
print('para2 is %d'%(args.para2))

運行為:

輸入:
python parser.py 10 20
結果:
para1 is 10
para2 is 20
--------------------------------------------------------
輸入:
python parser.py 10
結果:
usage: parser.py [-h] para1 para2
parser.py: error: the following arguments are required: para2
--------------------------------------------------------

PS:可以使用nargs參數來限定輸入的位置參數的個數,默認為1。nargs參數也可用於普通帶標簽的參數。

         此時多個參數值以list的形式作為鍵值

將para1參數改為

parser.add_argument('para1', type=int, nargs=2, help='display an para1')
#print也要修改一下,因為上述打印方式不能打印list
print(args.para1)

輸出:

輸入    python parser.py 10 20 30
輸出
[10, 20]
para2 is 30

默認參數值

有時候我們對於不需要改動的參數不用每次都操作進行輸入,我們可以借助default這個參數,給予其默認值

將代碼改為如下並保存

import argparse

parser = argparse.ArgumentParser()
#此處如果是位置參數,則default參數不起作用
parser.add_argument('--para1',  type  = int ,default= 6 , help='display an para1')
args = parser.parse_args()

print(args.para1)

在命令行輸入:  python parser.py

輸出:      6

選擇參數

這個參數值我認為很有用,將參數值的獲取限定在某個范圍內

編輯代碼:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('para1',  type  = int ,choices = [1,2,3,4,5], help='display an para1')
args = parser.parse_args()

print(args.para1)

如果輸入:    python parser.py 6

輸出會出現error:    

usage: parser.py [-h] {1,2,3,4,5}
parser.py: error: argument para1: invalid choice: 6 (choose from 1, 2, 3, 4, 5)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

疑問:關於default參數的使用,對於位置參數來說,使用default仿佛並沒有起到什么作用,如果不傳遞值得話還是會報錯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM