argparse 是 Python 內(nèi)置的一個(gè)用于命令項(xiàng)選項(xiàng)與參數(shù)解析的模塊结蟋,通過在程序中定義好我們需要的參數(shù)藐俺,argparse 將會從 sys.argv 中解析出這些參數(shù)硫戈,并自動生成幫助和使用信息倍谜。當(dāng)然瓢省,Python 也有第三方的庫可用于命令行解析窟坐,而且功能也更加強(qiáng)大海渊,比如 docopt,Click哲鸳。
argparse 使用
簡單示例
我們先來看一個(gè)簡單示例臣疑。主要有三個(gè)步驟:
- 創(chuàng)建 ArgumentParser() 對象
- 調(diào)用 add_argument() 方法添加參數(shù)
- 使用 parse_args() 解析添加的參數(shù)
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ù)的平方:
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ù)是可選的挤茄,廢話少說如叼,看下面例子:
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í)的動作练湿,默認(rèn)值是 store猴仑。
store_const,表示賦值為const肥哎;
append辽俗,將遇到的值存儲成列表,也就是如果參數(shù)重復(fù)則會保存多個(gè)值;
append_const篡诽,將參數(shù)規(guī)范中定義的一個(gè)值保存到一個(gè)列表崖飘;
count,存儲遇到的次數(shù)杈女;此外朱浴,也可以繼承 argparse.Action 自定義參數(shù)解析;
nargs - 應(yīng)該讀取的命令行參數(shù)個(gè)數(shù)达椰,可以是具體的數(shù)字翰蠢,或者是?號,當(dāng)不指定值時(shí)對于 Positional argument 使用 default啰劲,對于 Optional argument 使用 const梁沧;或者是 * 號,表示 0 或多個(gè)參數(shù)蝇裤;或者是 + 號表示 1 或多個(gè)參數(shù)廷支。
const - action 和 nargs 所需要的常量值。
default - 不指定參數(shù)時(shí)的默認(rèn)值栓辜。
type - 命令行參數(shù)應(yīng)該被轉(zhuǎn)換成的類型恋拍。
choices - 參數(shù)可允許的值的一個(gè)容器。
required - 可選參數(shù)是否可以省略 (僅針對可選參數(shù))藕甩。
help - 參數(shù)的幫助信息施敢,當(dāng)指定為 argparse.SUPPRESS 時(shí)表示不顯示該參數(shù)的幫助信息.
metavar - 在 usage 說明中的參數(shù)名稱,對于必選參數(shù)默認(rèn)就是參數(shù)名稱,對于可選參數(shù)默認(rèn)是全大寫的參數(shù)名稱.
dest - 解析后的參數(shù)名稱僵娃,默認(rèn)情況下羡藐,對于可選參數(shù)選取最長的名稱,中劃線轉(zhuǎn)換為下劃線.
注意:dest參數(shù)悯许,例如:
parser.add_argument('-b', action="store", dest="b")
那么即可用 args.b 來訪問該值。
具體參見:http://blog.xiayf.cn/2013/03/30/argparse/