1. 程式人生 > >python之Argparse模塊

python之Argparse模塊

全部 .html 提示 bbr ini from 位置參數 其中 posit

argparse 模塊可以輕松編寫用戶友好的命令行接口。程序定義它需要的參數,然後 argparse 將弄清如何從 sys.argv 解析出那些參數。 argparse 模塊還會自動生成幫助和使用手冊,並在用戶給程序傳入無效參數時報出錯誤信息。

argparse簡單使用流程

主要有三個步驟:

  • 創建 ArgumentParser() 對象
  • 調用 add_argument() 方法添加參數
  • 使用 parse_args() 解析添加的參數

創建解析器對象

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)

詳細解釋參考官方文檔:https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser

添加參數

分為添加位置參數-positional arguments和可選參數-optional arguments
添加位置參數聲明的參數名前綴不帶-或--,按照順序進行解析,在命令中必須出現,否則報錯,命令通常為:

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 說明中的參數名稱,對於必選參數默認就是參數名稱,對於可選參數默認是全大寫的參數名稱.
其它詳細用法文檔介紹:https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument

解析參數

args = parser.parse_args()

這樣args就有了參數屬性,可以用args了。

示例:

# 導入包
import argparse 
# 創建解析器
parser = argparse.ArgumentParser() 

#添加位置參數(positional arguments)
parser.add_argument('-a', type=int,help='input a int')
args = parser.parse_args()
print(args.a)

python之Argparse模塊