首頁 > 軟體

Python argparse 解析命令列引數模組詳情

2022-07-27 18:02:09

一、預備知識

argparsepython用於解析命令列引數和選項的標準模組,用於代替已經過時的optparse模組。argparse模組的作用是用於解析命令列引數。

1、安裝

argsparsepython的命令列解析的標準模組,內建於python,不需要安裝。使用的時候直接:

import argparse

2、使用的一般步驟

這個模組使用起來十分簡單,就類似於 造(買)個冰箱→在冰箱裡面放點食材→需要的時候把食材拿出來做出美味的食物。

它的使用分為三步:

# 1.建立一個解析物件;
parser = argparse.ArgumentParser()
# 2.然後向該物件中新增你要關注的命令列引數和選項,
#   每一個 add_argument 方法對應一個你要關注的引數或選項;
parser.add_argument()
# 3. 最後呼叫 parse_args()方法進行解析;
parser.parse_args()

另外,關於引數的書寫習慣,有如下幾種:

  • 空格分開,最常用,比如parser.parse_args('-x X'.split())
  • 長選項用=分開 ( “長”選項名字,即選項的名字多於一個字元),比如parser.parse_args('--foo=FOO'.split())
  • ​​​​​​​短選項可以寫在一起,比如parser.parse_args('-xX')

二、實操筆記

上面簡要介紹了使用的基本步驟,下面首先詳細介紹涉及到的幾個函數,然後再給一個範例。

1、函數詳解

1.1ArgumentParser

這個函數的作用就是建立一個解析物件(冰箱),下面是它的參數列:

ArgumentParser(prog=None, 
usage=None,
description=None, 
epilog=None, 
parents=[],
formatter_class=argparse.HelpFormatter, 
prefix_chars='-',
fromfile_prefix_chars=None, 
argument_default=None,
conflict_handler='error', 
add_help=True)

引數含義如下所示:

  • prog:程式的名字,預設為sys.argv[0],用來在help資訊中描述程式的名稱。
  • usage:描述程式用途的字串
  • description:help資訊前的文字。
  • epilog:help資訊之後的資訊
  • add_help:設為False時,help資訊裡面不再顯示-h --help資訊。
  • prefix_chars:引數字首,預設為-
  • ​​​​​​​fromfile_prefix_chars:字首字元,放在檔名之前
  • argument_default:引數的全域性預設值。
  • conflict_handler:對衝突的處理方式,預設為返回錯誤“error”。還有“resolve”,智慧解決衝突。當用戶給程式新增了兩個一樣的命令引數時,“error”就直接報錯,提醒使用者。而“resolve”則會去掉第一次出現的命令引數重複的部分或者全部(可能是短命令衝突或者全都衝突)。

1.2add_argument

此函數用來指定程式需要接受的命令引數,它的參數列如下所示:

add_argument(name or flags...
[, action]
[, nargs]
[, const]
[, default]
[, type]
[, choices]
[, required]
[, help]
[, metavar]
[, dest])
# 注:[] 表示可選

引數含義如下:

  • name or flags:引數有兩種,可選引數和位置引數。parse_args()執行時,會用-來認證可選引數,剩下的即為位置引數。位置引數必選,可選引數可選。
  • action:引數動作;argparse內建6種動作可以在解析到一個引數時進行觸發:store 儲存引數值,可能會先將引數值轉換成另一個資料型別。若沒有顯式指定動作,則預設為該動作。store_const 儲存一個被定義為引數規格一部分的值,而不是一個來自引數解析而來的值。這通常用於實現非布林值的命令列標記。store_ture/store_false 儲存相應的布林值。這兩個動作被用於實現布林開關。append 將值儲存到一個列表中。若引數重複出現,則儲存多個值。append_const 將一個定義在引數規格中的值儲存到一個列表中。version 列印關於程式的版本資訊,然後退出。 count統計引數出現的次數。
  • nargs:引數的數量。值可以為整數N(N個),*(任意多個),+(一個或更多),值為?時,首先從命令列獲得引數,若沒有則從const獲得,然後從default獲得:
  • dest:引數值就儲存為parse_args()返回的名稱空間物件中名為該 dest 引數值的一個屬性。如果提供dest,例如dest="a",那麼可以通過args.a存取該引數
  • default:設定引數的預設值
  • type:把從命令列輸入的結果轉成設定的型別
  • choice:允許的引數值
  • required:是否必選
  • desk:可作為引數名
  • help:引數命令的介紹

2、呼叫範例

下面給個簡單的範例,只是說明如何呼叫而已,後續可根據上面對函數的詳細解釋來使其更實用智慧。

import argparse
parser = argparse.ArgumentParser(description ="This is a Test!")
parser.add_argument("type",choices=['scheduler','tool'],
                    help="make application type")
parser.add_argument('-c',dest='configurefile',help="configure file")
parser.print_help()
args = parser.parse_args(["tool","-c","a.ini"])
print(args.type)
print(args.configurefile)
# --------------output------------------
usage: draft.py [-h] [-c CONFIGUREFILE] {scheduler,tool}

This is a Test!

positional arguments:
  {scheduler,tool}  make application type

optional arguments:
  -h, --help        show this help message and exit
  -c CONFIGUREFILE  configure file
tool
a.ini

這個簡單的例子就,就建立了一個argparse物件,然後加了兩個引數(不算-h),一個是必選引數tool,另一個是可選引數-c,然後使用dest將其轉換為引數的一個屬性。
ps:其實一開始筆者遇到了一個問題,一開始筆者在必選引數前加了type,其實是不用的,對於必選引數直接給值即可。
另外,當有多個必選引數時,需要注意必選引數的順序一定要和加引數的順序保持一致。
可選引數和必選引數可以交換順序,只需保持可選引數與值不要分開,必選引數的相對順序與加引數的順序保持一致即可!

到此這篇關於Python argparse 解析命令列引數模組詳情的文章就介紹到這了,更多相關Python argparse內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


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