Python的命令列引數解析
阿新 • • 發佈:2019-02-06
文章作者:Tyan
部落格:noahsnail.com | CSDN | 簡書
命令列引數解析在程式語言中基本都會碰到,Python中內建了一個用於命令項選項與引數解析的模組argparse
。下面主要介紹兩種解析Python命令列引數的方式。
1. sys.argv
解析Python中命令列引數的最傳統的方法是通過sys.argv
。Demo如下:
#!/usr/env/python python
# _*_ coding: utf-8 _*_
import sys
param1 = sys.argv[1]
param2 = sys.argv[2]
print sys.argv
print param1
print param2
print type(param1)
print type(param2)
測試結果如下:
$ python test.py 1 2
['test.py', '1', '2']
1
2
這種方法比較古老,靈活性很差,同時解析出來的引數都是str
型別。但在編寫簡單指令碼,引數較少且固定時比較方便。
2. argparse
argparse
模組是Python內建的引數解析模組,使用起來比較簡單且功能強大。Demo如下:
#!/usr/env/python python
# _*_ coding: utf-8 _*_
import argparse
# Create ArgumentParser() object
parser = argparse.ArgumentParser()
# Add argument
parser.add_argument('--train', required=True, help='path to dataset')
parser.add_argument('--val', required=True, help='path to dataset')
parser.add_argument('--total', type=int, help='number of dataset', default=100)
parser.add_argument('--lr', type =float, default=0.01, help='learning rate')
# Print usage
parser.print_help()
# Parse argument
args = parser.parse_args()
# Print args
print args
print args.train
print type(args.train)
print args.val
print type(args.val)
print args.total
print type(args.total)
print args.lr
print type(args.lr)
測試結果如下:
# Test 1
python test.py --train train_lmdb --val val_lmdb --total 10000 --lr 0.001
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]
optional arguments:
-h, --help show this help message and exit
--train TRAIN path to dataset
--val VAL path to dataset
--total TOTAL number of dataset
--lr LR learning rate
Namespace(lr=0.001, total=10000, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
10000
<type 'int'>
0.001
<type 'float'>
# Test 2
python test.py --train train_lmdb --val val_lmdb
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]
optional arguments:
-h, --help show this help message and exit
--train TRAIN path to dataset
--val VAL path to dataset
--total TOTAL number of dataset
--lr LR learning rate
Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
100
<type 'int'>
0.01
<type 'float'>
# Test 3
python test.py --val val_lmdb --train train_lmdb
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]
optional arguments:
-h, --help show this help message and exit
--train TRAIN path to dataset
--val VAL path to dataset
--total TOTAL number of dataset
--lr LR learning rate
Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
100
<type 'int'>
0.01
<type 'float'>
ArgumentParser
類建立時的引數如下:
- prog - 程式的名字(預設:sys.argv[0])
- usage - 描述程式用法的字串(預設:從解析器的引數生成)
- description - 引數幫助資訊之前的文字(預設:空)
- epilog - 引數幫助資訊之後的文字(預設:空)
- parents - ArgumentParser 物件的一個列表,這些物件的引數應該包括進去
- formatter_class - 定製化幫助資訊的類
- prefix_chars - 可選引數的字首字符集(預設:‘-‘)
- fromfile_prefix_chars - 額外的引數應該讀取的檔案的字首字符集(預設:None)
- argument_default - 引數的全域性預設值(預設:None)
- conflict_handler - 解決衝突的可選引數的策略(通常沒有必要)
- add_help - 給解析器新增-h/–help 選項(預設:True)
add_argument
函式的引數如下:
- name or flags - 選項字串的名字或者列表,例如foo 或者-f, –foo。
- action - 在命令列遇到該引數時採取的基本動作型別。
- nargs - 應該讀取的命令列引數數目。
- const - 某些action和nargs選項要求的常數值。
- default - 如果命令列中沒有出現該引數時的預設值。
- type - 命令列引數應該被轉換成的型別。
- choices - 引數可允許的值的一個容器。
- required - 該命令列選項是否可以省略(只針對可選引數)。
- help - 引數的簡短描述。
- metavar - 引數在幫助資訊中的名字。
- dest - 給parse_args()返回的物件要新增的屬性名稱。
參考資料: