鍍金池/ 教程/ Python/ argparse
基礎(chǔ)
itertools
HTTP 服務(wù)
hashlib
閉包
文件和目錄
單元測試
使用 @property
標(biāo)準(zhǔn)模塊
陌生的 metaclass
Base64
進(jìn)程、線程和協(xié)程
讀寫二進(jìn)制文件
匿名函數(shù)
輸入和輸出
Click
元組
字符編碼
partial 函數(shù)
參考資料
collections
協(xié)程
類和實(shí)例
Python 之旅
定制類和魔法方法
常用數(shù)據(jù)類型
繼承和多態(tài)
ThreadLocal
HTTP 協(xié)議簡介
Requests 庫的使用
讀寫文本文件
列表
os 模塊
迭代器 (Iterator)
正則表達(dá)式
集合
上下文管理器
異常處理
你不知道的 super
定義函數(shù)
datetime
資源推薦
字典
slots 魔法
hmac
第三方模塊
進(jìn)程
類方法和靜態(tài)方法
函數(shù)參數(shù)
高階函數(shù)
函數(shù)
re 模塊
高級(jí)特性
線程
argparse
生成器
結(jié)束語
字符串
map/reduce/filter
函數(shù)式編程
Celery
裝飾器

argparse

argparse 是 Python 內(nèi)置的一個(gè)用于命令項(xiàng)選項(xiàng)與參數(shù)解析的模塊,通過在程序中定義好我們需要的參數(shù),argparse 將會(huì)從 sys.argv 中解析出這些參數(shù),并自動(dòng)生成幫助和使用信息。當(dāng)然,Python 也有第三方的庫可用于命令行解析,而且功能也更加強(qiáng)大,比如 docopt,Click。

argparse 使用

簡單示例

我們先來看一個(gè)簡單示例。主要有三個(gè)步驟:

  • 創(chuàng)建 ArgumentParser() 對(duì)象
  • 調(diào)用 add_argument() 方法添加參數(shù)
  • 使用 parse_args() 解析添加的參數(shù)
# -*- coding: utf-8 -*-

import argparse

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

print args.integer

將上面的代碼保存為文件 argparse_usage.py,在終端運(yùn)行,結(jié)果如下:

$ python argparse_usage.py
usage: argparse_usage.py [-h] integer
argparse_usage.py: error: too few arguments

$ python argparse_usage.py abcd
usage: argparse_usage.py [-h] integer
argparse_usage.py: error: argument integer: invalid int value: 'abcd'

$ python argparse_usage.py -h
usage: argparse_usage.py [-h] integer

positional arguments:
  integer     display an integer

optional arguments:
  -h, --help  show this help message and exit

$ python argparse_usage.py 10
10

定位參數(shù)

上面的示例,其實(shí)就展示了定位參數(shù)的使用,我們再來看一個(gè)例子 - 計(jì)算一個(gè)數(shù)的平方:

# -*- coding: utf-8 -*-

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
args = parser.parse_args()
print args.square**2

將上面的代碼保存為文件 argparse_usage.py,在終端運(yùn)行,結(jié)果如下:

$ python argparse_usage.py 9
81

可選參數(shù)

現(xiàn)在看下可選參數(shù)的用法,所謂可選參數(shù),也就是命令行參數(shù)是可選的,廢話少說,看下面例子:

# -*- coding: utf-8 -*-

import argparse

parser = argparse.ArgumentParser()

parser.add_argument("--square", help="display a square of a given number", type=int)
parser.add_argument("--cubic", help="display a cubic of a given number", type=int)

args = parser.parse_args()

if args.square:
    print args.square**2

if args.cubic:
    print args.cubic**3

將上面的代碼保存為文件 argparse_usage.py,在終端運(yùn)行,結(jié)果如下:

$ python argparse_usage.py --h
usage: argparse_usage.py [-h] [--square SQUARE] [--cubic CUBIC]

optional arguments:
  -h, --help       show this help message and exit
  --square SQUARE  display a square of a given number
  --cubic CUBIC    display a cubic of a given number

$ python argparse_usage.py --square 8
64

$ python argparse_usage.py --cubic 8
512

$ python argparse_usage.py 8
usage: argparse_usage.py [-h] [--square SQUARE] [--cubic CUBIC]
argparse_usage.py: error: unrecognized arguments: 8

$ python argparse_usage.py  # 沒有輸出

混合使用

定位參數(shù)和選項(xiàng)參數(shù)可以混合使用,看下面一個(gè)例子,給一個(gè)整數(shù)序列,輸出它們的和或最大值(默認(rèn)):

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
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()
print args.accumulate(args.integers)

結(jié)果:

$ python argparse_usage.py
usage: argparse_usage.py [-h] [--sum] N [N ...]
argparse_usage.py: error: too few arguments
$ python argparse_usage.py 1 2 3 4
4
$ python argparse_usage.py 1 2 3 4 --sum
10

add_argument() 方法

add_argument() 方法定義如何解析命令行參數(shù):

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

每個(gè)參數(shù)解釋如下:

  • name or flags - 選項(xiàng)字符串的名字或者列表,例如 foo 或者 -f, --foo。
  • action - 命令行遇到參數(shù)時(shí)的動(dòng)作,默認(rèn)值是 store。
    • store_const,表示賦值為const;
    • append,將遇到的值存儲(chǔ)成列表,也就是如果參數(shù)重復(fù)則會(huì)保存多個(gè)值;
    • append_const,將參數(shù)規(guī)范中定義的一個(gè)值保存到一個(gè)列表;
    • count,存儲(chǔ)遇到的次數(shù);此外,也可以繼承 argparse.Action 自定義參數(shù)解析;
  • nargs - 應(yīng)該讀取的命令行參數(shù)個(gè)數(shù),可以是具體的數(shù)字,或者是?號(hào),當(dāng)不指定值時(shí)對(duì)于 Positional argument 使用 default,對(duì)于 Optional argument 使用 const;或者是 * 號(hào),表示 0 或多個(gè)參數(shù);或者是 + 號(hào)表示 1 或多個(gè)參數(shù)。
  • const - action 和 nargs 所需要的常量值。
  • default - 不指定參數(shù)時(shí)的默認(rèn)值。
  • type - 命令行參數(shù)應(yīng)該被轉(zhuǎn)換成的類型。
  • choices - 參數(shù)可允許的值的一個(gè)容器。
  • required - 可選參數(shù)是否可以省略 (僅針對(duì)可選參數(shù))。
  • help - 參數(shù)的幫助信息,當(dāng)指定為 argparse.SUPPRESS 時(shí)表示不顯示該參數(shù)的幫助信息.
  • metavar - 在 usage 說明中的參數(shù)名稱,對(duì)于必選參數(shù)默認(rèn)就是參數(shù)名稱,對(duì)于可選參數(shù)默認(rèn)是全大寫的參數(shù)名稱.
  • dest - 解析后的參數(shù)名稱,默認(rèn)情況下,對(duì)于可選參數(shù)選取最長的名稱,中劃線轉(zhuǎn)換為下劃線.

參考資料