argparse 是python自帶的命令行參數解析包,可以用來方便地讀取命令行參數。argparse 模塊還會自動生成幫助和使用手冊,並在用戶給程序傳入無效參數時報出錯誤信息。
使用流程
主要有三個步驟:
- 創建 ArgumentParser() 對象
- 調用 add_argument() 方法添加參數
- 使用 parse_args() 解析添加的參數
創建 ArgumentParser() 對象
語法:
parser = argparse.ArgumentParser()
一般這樣即可,全部可選參數如下。
class argparse.ArgumentParser(prog=None, usage=None, description=None,
epilog=None, parents=[], formatter_class=argparse.HelpFormatter,
prefix_chars=’-’, fromfile_prefix_chars=None, argument_default=None,
conflict_handler=‘error’, add_help=True, allow_abbrev=True)
各個參數的作用如下:
- 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)
- allow_abbrev - 如果縮寫是無歧義的,則允許縮寫長選項 (默認值:True)
通常會使用usage和description參數,以在使用時獲取幫助信息。
調用 add_argument() 方法添加參數
ArgumentParser.add_argument(name or flags…[, action][, nargs][,const][, default][, type][, choices][, required][, help][, metavar][,dest])
各個參數作用如下:
- name or flags - 一個命名或者一個選項字符串的列表,例如 foo 或 -f, --foo。
- action - 當參數在命令行中出現時使用的動作基本類型。
- nargs - 命令行參數應當消耗的數目。
- const - 被一些 action 和 nargs 選擇所需求的常數。
- default - 當參數未在命令行中出現時使用的值。
- type - 命令行參數應當被轉換成的類型。
- choices - 可用的參數的容器。
- required - 此命令行選項是否可省略 (僅選項可用)。
- help - 一個此選項作用的簡單描述。
- metavar - 在使用方法消息中使用的參數值示例。
- dest - 被添加到 parse_args() 所返回對象上的屬性名。
分爲添加位置參數和可選參數
添加位置參數聲明的參數名前綴不帶-或–,按照順序進行解析,在命令中必須出現,否則報錯,命令通常爲:
parser.add_argument("a")
parser.add_argument("b")
parser.add_argument("c")
添加可選參數聲明的參數名前綴帶-或–,前綴是-的爲短參數,前綴是–是長參數,兩者可以都有,也可以只有一個,短參數和長參數效果一樣。可選參數的值接在位置參數的後面,不影響位置參數的解析順序。
以深度學習訓練中經常出現的爲例:
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M',
help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False,
help='disables CUDA training')
parser.add_argument('--save-model', action='store_true', default=False,
help='For Saving the current Model')
其中action參數的’store_true’指的是:觸發action時爲真,不觸發則爲假。即儲存了一個bool變量,默認爲false,觸發不用賦值即變爲true。
type:指定參數類別,默認是str,傳入其他類型要定義。
help:一些提示信息。
default:默認值。
metavar:在 usage 說明中的參數名稱,對於必選參數默認就是參數名稱,對於可選參數默認是全大寫的參數名稱。
使用 parse_args() 解析添加的參數
命令:
args = parser.parse_args()
這樣args就有了參數屬性,可以用args了。
示例
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', type=int,help='input a int')
args = parser.parse_args()
print(args.a)
更多內容可參考:
argparse