argparse?模塊簡介
1. argparse 模塊簡介
argparse是一個用來解析命令行參數(shù)的 Python 庫,它是 Python 標準庫的一部分?;?python 2.7 的stdlib 代碼。
argparse模塊使編寫用戶友好的命令行界面變得容易。程序定義了所需的參數(shù),而 argparse 將找出如何從 sys.argv(命令行)中解析這些參數(shù)。argparse 模塊還會自動生成幫助和使用消息,并在用戶為程序提供無效參數(shù)時發(fā)出錯誤。
2. 未使用argparse示例
一般未使用到終端命令,對于一些需要變量賦值的程序,我們往往:
1、直接在程序中(或配置文件)寫死。
2、或者利用input在命令行多次輸入 這樣不易多次調(diào)試及修改運行,如下就是一個示例:
import math def cal_vol(radius,height): vol = math.pi * pow(radius,2) * height return vol if __name__=='__main__': print(cal_vol(2,4))
3. 使用argparse示例
3.1 argparse簡單示例
使用argparse的主要步驟:
導(dǎo)入argparse包;創(chuàng)建ArgumentParser()參數(shù)對象;調(diào)用add_argument()方法往參數(shù)對象中添加參數(shù);使用parse_args()解析添加參數(shù)的參數(shù)對象,獲得解析對象;程序的其他部分需要使用命令行參數(shù)時,用解析對象.參數(shù)獲取。
如下是一個簡單的示例:
import math import argparse # 1、導(dǎo)入argpase包 def parse_args(): parse = argparse.ArgumentParser(description='Calculate cylinder volume') # 2、創(chuàng)建參數(shù)對象 parse.add_argument('radius', type=int, help='Radius of Cylinder') # 3、往參數(shù)對象添加參數(shù) parse.add_argument('height', type=int, help='height of Cylinder') args = parse.parse_args() # 4、解析參數(shù)對象獲得解析對象 return args # 計算圓柱體積 def cal_vol(radius, height): vol = math.pi * pow(radius, 2) * height return vol if __name__ == '__main__': args = parse_args() print(cal_vol(args.radius, args.height)) # 5、使用解析對象.參數(shù)獲取使用命令行參數(shù)
注:此時因未指定,所以命令行參數(shù)輸入默認按順序賦值,順序不同會造成結(jié)果不同
默認命令-h可以獲取添加參數(shù)時設(shè)置的幫助信息
3.2 argparse進階示例
add_argument()方法(定義如何解析命令行參數(shù)):
參數(shù)解釋如下:
name or flags - 選項字符串的名字或者列表,例如 foo 或者 -f, --foo。
action - 命令行遇到參數(shù)時的動作,默認值是 store。
- – store_const,表示賦值為const;
- – append,將遇到的值存儲成列表,也就是如果參數(shù)重復(fù)則會保存多個值;
- – append_const,將參數(shù)規(guī)范中定義的一個值保存到一個列表;
- – count,存儲遇到的次數(shù);此外,也可以繼承 argparse.Action 自定義參數(shù)解析;
nargs - 應(yīng)該讀取的命令行參數(shù)個數(shù),可以是
- 具體的數(shù)字,或者是?號,當(dāng)不指定值時對于 Positional argument 使用 default,對于 Optional argument 使用 const
- 或者是 * 號,表示 0 或多個參數(shù);
- 或者是 + 號表示 1 或多個參數(shù)。
const - action 和 nargs 所需要的常量值。
default - 不指定參數(shù)時的默認值。
type - 命令行參數(shù)應(yīng)該被轉(zhuǎn)換成的類型。默認是字符串類型。
choices - 參數(shù)可允許的值的一個容器。
required - 可選參數(shù)是否可以省略 (僅針對可選參數(shù))。
help - 參數(shù)的幫助信息,當(dāng)指定為 argparse.SUPPRESS 時表示不顯示該參數(shù)的幫助信息.
metavar - 在 usage 說明中的參數(shù)名稱,對于必選參數(shù)默認就是參數(shù)名稱,對于可選參數(shù)默認是全大寫的參數(shù)名稱.
dest - 解析后的參數(shù)名稱,默認情況下,對于可選參數(shù)選取最長的名稱,中劃線轉(zhuǎn)換為下劃線.
3.2.1 可選參數(shù)設(shè)置
import math import argparse # 1、導(dǎo)入argpase包 def parse_args(): parse = argparse.ArgumentParser(description='Calculate cylinder volume') # 2、創(chuàng)建參數(shù)對象 parse.add_argument('--radius', default=2, type=int, help='Radius of Cylinder') # 3、往參數(shù)對象添加參數(shù) parse.add_argument('--height', default=4, type=int, help='height of Cylinder') args = parse.parse_args() # 4、解析參數(shù)對象獲得解析對象 return args def cal_vol(radius, height): vol = math.pi * pow(radius, 2) * height return vol if __name__ == '__main__': args = parse_args() print(cal_vol(args.radius, args.height)) # 5、使用解析對象.參數(shù)獲取使用命令行參數(shù)
通過在參數(shù)名前加 - -,設(shè)置為可選參數(shù),如果未輸入,則使用default默認值(若未設(shè)置default,則會默認賦值None),如下示例:
3.2.2 可選參數(shù)引用名
import math import argparse # 1、導(dǎo)入argpase包 def parse_args(): parse = argparse.ArgumentParser(description='Calculate cylinder volume') # 2、創(chuàng)建參數(shù)對象 parse.add_argument('-r', '--radius', default=2, type=int, help='Radius of Cylinder') # 3、往參數(shù)對象添加參數(shù) parse.add_argument('-H', '--height', default=4, type=int, help='height of Cylinder') args = parse.parse_args() # 4、解析參數(shù)對象獲得解析對象 return args def cal_vol(radius, height): vol = math.pi * pow(radius, 2) * height return vol if __name__ == '__main__': args = parse_args() print(cal_vol(args.radius, args.height)) # 5、使用解析對象.參數(shù)獲取使用命令行參數(shù)
通過將可選參數(shù)設(shè)置引用名,可以縮短參數(shù)名,簡化命令行參數(shù)輸入:
如下:-r和- -radius都可以
3.2.3 清除幫助中的參數(shù)名信息
import math import argparse # 1、導(dǎo)入argpase包 def parse_args(): parse = argparse.ArgumentParser(description='Calculate cylinder volume') # 2、創(chuàng)建參數(shù)對象 parse.add_argument('-r', '--radius', default=2, type=int, metavar='', help='Radius of Cylinder') # 3、往參數(shù)對象添加參數(shù) parse.add_argument('-H', '--height', default=4, type=int, metavar='', help='height of Cylinder') args = parse.parse_args() # 4、解析參數(shù)對象獲得解析對象 return args def cal_vol(radius, height): vol = math.pi * pow(radius, 2) * height return vol if __name__ == '__main__': args = parse_args() print(cal_vol(args.radius, args.height)) # 5、使用解析對象.參數(shù)獲取使用命令行參數(shù)
如下,對比3.2.2中-h顯示信息,去掉了參數(shù)名
原因:
metavar在通過-h顯示 usage
說明中的參數(shù)名稱,對于必選參數(shù)默認就是參數(shù)名稱,對于可選參數(shù)默認是全大寫的參數(shù)名稱.。這里通過設(shè)置為空一律不顯示。
3.2.4 必選參數(shù)設(shè)置
import math import argparse # 1、導(dǎo)入argpase包 def parse_args(): parse = argparse.ArgumentParser(description='Calculate cylinder volume') # 2、創(chuàng)建參數(shù)對象 parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder') # 3、往參數(shù)對象添加參數(shù) parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder') args = parse.parse_args() # 4、解析參數(shù)對象獲得解析對象 return args def cal_vol(radius, height): vol = math.pi * pow(radius, 2) * height return vol if __name__ == '__main__': args = parse_args() print(cal_vol(args.radius, args.height)) # 5、使用解析對象.參數(shù)獲取使用命令行參數(shù)
當(dāng)通過設(shè)置required=True后,無論參數(shù)是否是可選參數(shù),都必須輸入,如下示例:
3.2.5 列表參數(shù)(多參數(shù))傳入設(shè)置
import math import argparse def parse_args(): parse = argparse.ArgumentParser(description='Calculate cylinder volume') parse.add_argument('-n', '--num', type=int, nargs='+', metavar='', required=True, help='a string of nums') args = parse.parse_args() return args if __name__ == '__main__': args = parse_args() print(args.num) for i in list(args.num): print(i)
3.2.6 互斥參數(shù)使用
import math import argparse def parse_args(): parse = argparse.ArgumentParser(description='Calculate cylinder volume') parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder') parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder') group = parse.add_mutually_exclusive_group() # 1、在參數(shù)對象中添加互斥組 group.add_argument('-b', '--brief', action='store_true', help='print brief message') # 2、在互斥組中添加參數(shù)(store_true默認當(dāng)命令行未輸入?yún)?shù)則為False,否則為True) group.add_argument('-v', '--verbose', action='store_true', help='print verbose message') args = parse.parse_args() return args def cal_vol(radius, height): vol = math.pi * pow(radius, 2) * height return vol if __name__ == '__main__': args = parse_args() volume = cal_vol(args.radius, args.height) if args.brief: print(volume) elif args.verbose: print('Volume of Cylinder with radius %s and height %s is %s' % (args.radius,args.height,volume)) else: print('Volume of Cylinder is %s' % (volume))
命令行中b和v只能輸入二者中的一個參數(shù)。
3.2.7 默認參數(shù)設(shè)置
set_defaults()可以設(shè)置一些參數(shù)的默認值
import math import argparse def parse_args(): parse = argparse.ArgumentParser(description='Calculate cylinder volume') parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder') parse.set_defaults(height=4) args = parse.parse_args() return args def cal_vol(radius, height): vol = math.pi * pow(radius, 2) * height return vol if __name__ == '__main__': args = parse_args() print(cal_vol(args.radius, args.height))
4. 參考文獻
Python argparse命令行參數(shù)解析包的詳細教程
到此這篇關(guān)于argparse 模塊詳解的文章就介紹到這了,更多相關(guān)argparse 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)抓取百度搜索結(jié)果頁的網(wǎng)站標題信息
這篇文章主要介紹了Python實現(xiàn)抓取百度搜索結(jié)果頁的網(wǎng)站標題信息,本文使用BeautifulSoup來解析HTML,需要的朋友可以參考下2015-01-01GitHub 熱門:Python 算法大全,Star 超過 2 萬
4 月 27 日,GitHub 趨勢榜第 3 位是一個用 Python 編碼實現(xiàn)的算法庫,Star 數(shù)早已達到 26000+2019-04-04numpy中數(shù)組拼接、數(shù)組合并方法總結(jié)(append(),?concatenate,?hstack,?vstack
numpy庫是一個高效處理多維數(shù)組的工具,可以在進行邊寫的數(shù)組計算上進行一系列的操作,下面這篇文章主要給大家介紹了關(guān)于numpy中數(shù)組拼接、數(shù)組合并方法(append(),?concatenate,?hstack,?vstack,?column_stack,?row_stack,?np.r_,?np.c_等)的相關(guān)資料,需要的朋友可以參考下2022-08-08淺談python的輸入輸出,注釋,基本數(shù)據(jù)類型
這篇文章主要介紹了python的輸入輸出,注釋,基本數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04