1. Python 的命令列參數管理

  2. argparse 模組

    • 部署說明資訊
    • 參數類型

Python 的命令列參數管理

當使用 sys 模組下的 argv,可以觀看當前的參數內容。

參數在 sys.argv 下是成 string 型態儲存,但是 list 成次序排列,且只會儲存當前輸入項目,因此在調用上十分不方便。

Python 的 argparse 模組是一個不錯的選擇(3.2 版加入),可以用簡單的設定設置參數名稱和類型,並自動生成類 Unix OS 的 help 選項供調用。

argparse 模組

簡單列出常用的選項。

參考資料:

  1. https://docs.python.org/3/library/argparse.html
  2. http://stackoverflow.com/questions/5262702/argparse-module-how-to-add-option-without-any-argument
  3. Python 函式庫語法範例字典:http://www.books.com.tw/products/0010726838

部署說明資訊

在腳本中設定:

import argparse

parser = argparse.ArgumentParser(
    prog='prog.py', #程式名稱,預設 sys.argv[0]
    usage='%(prog)s [options]', #自訂使用方法外觀,預設由參數產生
    description='程式說明', #頂端程式說明,預設 None
    epilog='程式說明2', #底端程式說明,預設 None
    prefix_chars='-', #參數起始字串,預設 '-'
    add_help=False, #是否開啟 Help 選項,預設 True
    )
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator') #第一個參數
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)') #第二個參數
args = parser.parse_args() #解析

如果有啟用 add_help 選項,模組產出的 Help 說明如下:

$ python3 prog.py -h
usage: prog.py [options]

程式說明

positional arguments:
 N           an integer for the accumulator

optional arguments:
 -h, --help  show this help message and exit
 --sum       sum the integers (default: find the max)

 程式說明2

參數類型

add_argument() 方法中可使用的選項。

  1. name or flags

    名稱或標籤,看之前設置的 prefix_chars 決定,名稱只能為一個,標籤表示法可以有多個。

  2. action

    傳入參數的動作,預設為 'store'

    • 'store':儲存,啟用此標籤時會存入後方跟著的項目,按照 type 選項儲存輸入值。
    • 'store_const':儲存為常數,啟用此標籤時會存入一個定值,這時必須設定 const 選項。
    • 'store_true''store_false':儲存為 True 或 False,啟用此標籤時會存入 True 或 False。
    • 'append':產生一個 list,啟用此標籤時會將後方跟著的項目,按照 type 選項儲存到 list 中。
    • 'append_const':產生一個 list,啟用此標籤時會將 const 選項的類型存入 list 中。
    • 'count':紀錄這個標籤出現的次數,如 -v 選項輸入成 -vvv 時會回傳 3。
    • 'help':預設已經加入,此時若是自行設置會導致衝突。
    • 'version':顯示版本而不啟動程式,這時必須設定 version 選項。
    • argparse.Action 類型:繼承後,透過修改 callinit 方法來達成額外的條件。
  3. nargs

    決定多個參數傳入時的處理方式,預設由 action 選項決定。

    • 'N':迭代,使用一個 list 包裝此標籤後的參數。
    • '?':單一,一次只能傳入一個參數,後方的項目會被視為其他標籤。
    • '*':不限,使用一個 list 包裝此標籤後的參數,多餘的參數會自動歸類到此標籤下。
    • '+':至少一個,類似 '*',但是在此標籤沒有任何參數時會跳出錯誤訊息。
    • argparse.REMAINDER 物件:存為 list,使用一個 list 包裝此標籤和其參數。
  4. const

    根據 action 和 nargs 選項決定的定值。

  5. default

    未輸入時的預設值,不受 type 選項的轉換。

    • argparse.SUPPRESS 物件:若此選項沒有任何參數,不會建立這個選項。
  6. type

    轉換輸入值的類型,支援任何可呼叫(callable)的類型,預設為 string。

    • open:這個類型可以開啟純文字格式的檔案。
    • argparse.FileType('w'):argparse 也提供讀寫檔案的選項,作用同上。
    • choices 選項會在 type 選項轉換完畢後才比對。
  7. choices

    比對輸入值的項目是否符合,可接受 list 與 generator,若否則跳出錯誤。

  8. required

    是否為必要標籤,預設為 False。若要啟用,將其設為 True 即可,Help 項目中會歸類成必要標籤。

  9. help

    當顯示 Help 項目時的說明文字,預設為空字串。

    • '%(arg)s':說明文字中可以引用其他選項,如 %(default)s%(type)s 等,若要使用 % 符號,可以用 %% 表示。
    • argparse.SUPPRESS 物件:這個標籤不會顯示在 Help 項目中。

Comments

comments powered by Disqus