Python命令列解析器argparse的使用
阿新 • • 發佈:2018-12-16
argparse是Python內建的一個用於命令項選項與引數解析的模組,在編寫指令碼的過程中是非常常用的。 在其使用中主要包含三個步驟:
import argparse
parser = argparse.ArgumentParser(description='this is a process for read file')
parser.add_argument('fileinPath', help='path to input file')
parser.add_argument('fileoutPath', help='path to output file')
args = parser. parse_args()
而當如上定義後,即可在需要用到引數的地方呼叫args.fileinPath
和args.fileoutPath
。下面詳細講解一下add_argument()
方法。
add_argument()
方法
位置引數
位置引數是必選引數,如果命令列解析不到就會報錯,上面例子中兩個引數都是位置引數。
可選引數
可選引數可以填寫兩種,長的可選引數以及短的,並且可以並存,會首先解析長可選引數。如:
parser.add_argument('-s', '--square', help='display a square of a given number', type=int)
當然在一個指令碼中,位置引數與可選引數是可以並存的。
一個例子
給一個整數序列,輸出它們的和或最大值(預設)
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))
則在呼叫的時候:
>>> python test.py
usage: test.py [-h] [--sum] N [N ...]
test.py: error: the following arguments are required: N
>>> python test.py -h
usage: test.py [-h] [--sum] N [N ...]
Process some integers.
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)
>>> python test.py 1 2 3 4
4
>>> python test.py 1 2 3 4 --sum
10
所有引數
name or flags
- 選項字串的名字或者列表,例如foo
或者-f
,--foo
;action
- 命令列遇到引數時的動作,預設值是store
;store_const
,表示賦值為const
。意思為如果能解析到該引數,則該引數賦值為const
的值,見上個例子;store_true
和store_false
,引數預設值分別為False
和True
。意思為如果能解析到該引數,則引數值分別改為True
和False
;append
,將遇到的值儲存成list
,也就是如果引數重複則會儲存多個值。如:>>> import argparse >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='append', type=int) >>> parser.parse_args('--foo 1 --foo 2'.split()) Namespace(foo = [1, 2])
append_const
,將固定值儲存成一個list
。意思為如果能解析道該引數,則list
將會append
一個const
進來。如:
在命令列:import argparse parser = argparse.ArgumentParser() parser.add_argument('--str', dest='types', action='append_const', const=str) parser.add_argument('--int', dest='types', action='append_const', const=int) args = parser.parse_args() print(args)
>>> python test.py --str --str --int Namespace(types=[<class 'str'>, <class 'str'>, <class 'int'>])
count
,儲存遇到的引數次數。nrgs
- 應該讀取的命令列引數個數,可以是具體的數字、*
、+
和?
。*
表示0個或多個;+
表示1個或多個;?
時,若解析不到引數,則使用default
值,對於可選引數,若只寫了引數名而後面沒有值,則使用const
值。如>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', nargs='?', const='c', default='d') >>> parser.add_argument('bar', nargs='?', default='d') >>> parser.parse_args(['XX', '--foo', 'YY']) Namespace(bar='XX', foo='YY') >>> parser.parse_args(['XX', '--foo']) Namespace(bar='XX', foo='c') >>> parser.parse_args([]) Namespace(bar='d', foo='d')
nargs=1
會將引數存放為list
,不同於不設定;對引數加nargs='*'
或nargs='+'
在一定程度可以代替action='append'
。const
-action
和nargs
所需要的常量值;default
- 不指定引數時的預設值;type
- 命令列引數應該被轉換成的型別;choices
- 引數可允許的值的一個容器。可以是list
和range
;required
- 可選引數是否可以省略 (僅針對可選引數)。如果設定required='True'
,則可選引數解析不到時報錯;metavar
- 在 usage 說明中的引數名稱,對於位置引數預設就是引數名稱,對於可選引數預設是全大寫的引數名稱;dest
- 解析後的引數名稱,預設情況下,對於可選引數選取最長的名稱,中劃線轉換為下劃線。