背景
Argparse
顧名思義參數(shù)解析器嚣伐,是命令行運行 python
文件時解析參數(shù)的模塊,多用在需要多次修改代碼參數(shù)的時候萍丐。比如 batch_size
轩端、epoch
等,那么使用該模塊將無比簡單逝变。
基本結構
假設 python
文件名為 :test.py
基茵。
import argparse
parser = argparse.ArgumentParser(description="Demo of argparse.")
parser.add_argument('--batch_size', default=32, help='nums of a batch data')
parser.add_argument('-p', dest='path', default='data/', help='the path of data')
parser.add_argument('-m', '--model', default='train', help='train or eval')
args = parser.parse_args()
print(args)
命令行運行時輸入:
python test.py [--batch_size [128]] [-p [save/]] [-m [train]]
使用詳解
第一步
parser = argparse.ArgumentParser(description='Demo of argparse')
使用 argparse
創(chuàng)建一個 ArgumentParser
對象,主要使用 description
參數(shù)壳影,目的是在命令行運
行時使用 -h
顯示程序的一個自定義簡單描述拱层。像這樣:
E:\> python test.py -h
usage: test.py [-h] [--batch_size BATCH_SIZE] [-p PATH] [-m MODEL]
Demo of argparse.
optional arguments:
-h, --help show this help message and exit
--batch_size BATCH_SIZE
nums of a batch data
-p P ATH the path of data
-m MODEL, --model MODEL
train or eval
第二步
parser.add_argument('-m', '--model', default='train', help='train or eval')
通過 add_argument()
方法添加需要的一些參數(shù)。
該方法本身共包含11個參數(shù)宴咧,下面只展開幾個常用的:
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
-
name or flags
name
和flags
分別以可以-
和--
開頭根灯,兩者可以都設置,也可以只設置其中一個。從第一步的運行結果可以看到若同時定義了這兩個烙肺,會以
-
為主芥驳,但是命令行運行時兩者都可以用。比如:
python test.py [--batch_size [128]] [-p [save/]] -m train
或者
python test.py [--batch_size [128]] [-p [save/]] --model train
default
要添加參數(shù)的默認值茬高,比如命令行中省略-p
時兆旬,默認args.path
值是data\
。type
要添加參數(shù)的類型怎栽,默認為str
類型丽猬。若需要布爾類型或者浮點型,設成bool
和float
熏瞄。required
命令行中是否必須使用該參數(shù)脚祟,默認為False
。若設required=True
强饮,就算有默認值由桌,沒有使用也會報錯。help
要添加參數(shù)的一個簡單描述邮丰,忘了這個參數(shù)有什么用時可以查看行您。dest
要添加參數(shù)的名字,默認為--
或者-
剪廉,用法在第三步娃循。
第三步
args = parser.parse_args()
path = args.path
通過 parse_args()
方法調用已經(jīng)定義的參數(shù),然后通過 args.'dest'
獲得添加的參數(shù)值斗蒋。
Reference
argparse—Parser for command-line options, arguments and sub-commands