程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 之 argparse 解析命令行參數模塊

編輯:Python

參考:
Python–argparse 模塊:https://www.jianshu.com/p/ea52fdfaa4ad

文章目錄

  • Part.I 預備知識
    • Chap.I 安裝
    • Chap.II 使用的一般步驟
  • Part.II 實操筆記
    • Chap.I 函數詳解
      • Sec.I ArgumentParser
      • Sec.II add_argument
    • Chap.II 調用實例

Part.I 預備知識

argparsepython用於解析命令行參數和選項的標准模塊,用於代替已經過時的optparse模塊。argparse模塊的作用是用於解析命令行參數。

Chap.I 安裝

argsparsepython的命令行解析的標准模塊,內置於python,不需要安裝。使用的時候直接:

import argparse

Chap.II 使用的一般步驟

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

它的使用分為三步:

# 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')

Part.II 實操筆記

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

Chap.I 函數詳解

Sec.I ArgumentParser

這個函數的作用就是創建一個解析對象(冰箱),下面是它的參數列表:

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”則會去掉第一次出現的命令參數重復的部分或者全部(可能是短命令沖突或者全都沖突)。

Sec.II add_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:參數命令的介紹

Chap.II 調用實例

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

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,其實是不用的,對於必選參數直接給值即可。
另外,當有多個必選參數時,需要注意必選參數的順序一定要和加參數的順序保持一致。
可選參數和必選參數可以交換順序,只需保持可選參數與值不要分開,必選參數的相對順序與加參數的順序保持一致即可!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved