詳解Python中的argparse模塊
argparse模塊
argparse是一個(gè)用于解析命令行參數(shù)和選項(xiàng)的python標(biāo)準(zhǔn)庫(kù)模塊。
它可以讓你輕松地編寫(xiě)用戶(hù)友好的命令行界面,定義你的程序需要的參數(shù),自動(dòng)生成幫助和用法信息,以及處理用戶(hù)給出的無(wú)效參數(shù)。
在這篇博客中,我將介紹argparse的基本用法,以及一些高級(jí)功能,如子命令、互斥組、文件類(lèi)型等。
我將用豐富的例子和解釋來(lái)幫助你理解和掌握argparse的使用方法。
一、一個(gè)最簡(jiǎn)單的示例
使用argparse,你可以指定程序所需的參數(shù)、選項(xiàng)以及如何解析它們。
下面是一個(gè)基本的示例,演示了如何使用argparse來(lái)解析命令行參數(shù):
import argparse # 創(chuàng)建ArgumentParser對(duì)象 parser = argparse.ArgumentParser(description='這是一個(gè)使用argparse的示例程序') # 添加位置參數(shù) parser.add_argument('name', help='姓名') parser.add_argument('age', type=int, help='年齡') # 添加可選參數(shù) parser.add_argument('--gender', choices=['male', 'female'], help='性別') parser.add_argument('--height', type=float, help='身高') # 解析命令行參數(shù) args = parser.parse_args() # 訪問(wèn)解析后的參數(shù) print(f'姓名: {args.name}') print(f'年齡: {args.age}') print(f'性別: {args.gender}') print(f'身高: {args.height}')
在上面的示例中,我們首先創(chuàng)建了一個(gè)ArgumentParser對(duì)象,并提供了一個(gè)描述性的文字作為參數(shù)。
然后,我們添加了兩個(gè)位置參數(shù)(name和age),并分別指定了它們的幫助文本。
接下來(lái),我們添加了兩個(gè)可選參數(shù)(–gender和–height),并使用choices和type參數(shù)限制了它們的取值范圍和類(lèi)型。
最后,我們調(diào)用parse_args()方法來(lái)解析命令行參數(shù),并將解析后的結(jié)果存儲(chǔ)在args變量中。我們可以通過(guò)訪問(wèn)args對(duì)象的屬性來(lái)獲取解析后的參數(shù)值,并進(jìn)行相應(yīng)的處理。
例如,如果我們?cè)诿钚兄羞\(yùn)行上述代碼并提供以下輸入:
python my_program.py John 25 --gender male --height 1.75
輸出將是:
姓名: John
年齡: 25
性別: male
身高: 1.75
或者在pycharm輸入這些參數(shù):
這樣可以獲得相同的結(jié)果:
如果不輸入默認(rèn)參數(shù)直接運(yùn)行,會(huì)如下圖的報(bào)錯(cuò):
二 、詳細(xì)參數(shù)講解
創(chuàng)建一個(gè)解析器
要使用argparse,首先你需要?jiǎng)?chuàng)建一個(gè)argparse.ArgumentParser的實(shí)例,它是一個(gè)包含參數(shù)規(guī)范和一些全局選項(xiàng)的容器。
你可以在創(chuàng)建時(shí)傳入一些參數(shù),如程序名、描述、幫助信息等,來(lái)定制你的解析器。
例如:
import argparse # 創(chuàng)建一個(gè)解析器 parser = argparse.ArgumentParser( prog="myprog", # 程序名,默認(rèn)為sys.argv[0] description="This is a program that does something", # 程序描述 epilog="This is some text at the bottom of help" # 幫助信息底部的文本 )
添加參數(shù)
創(chuàng)建了一個(gè)解析器后,你需要用add_argument()方法來(lái)添加你想要解析的參數(shù)。
argparse支持兩種類(lèi)型的參數(shù):位置參數(shù)和可選參數(shù)。
位置參數(shù)是根據(jù)它們?cè)诿钚兄谐霈F(xiàn)的位置來(lái)識(shí)別的,它們通常是必須提供的參數(shù)。
例如:
# 添加一個(gè)位置參數(shù) parser.add_argument("filename", help="the name of the file to process")
可選參數(shù)是根據(jù)它們前面的短橫線或雙橫線來(lái)識(shí)別的,它們通常是可以省略或指定不同值的參數(shù)。例如:
# 添加一個(gè)可選參數(shù) parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true")
add_argument()方法可以接受很多參數(shù)來(lái)定制你的參數(shù)行為和屬性,如類(lèi)型、默認(rèn)值、選項(xiàng)、必需性、幫助信息等。你可以查看[argparse文檔]來(lái)了解更多細(xì)節(jié)。
解析參數(shù)
添加了所有想要解析的參數(shù)后,你可以用parse_args()方法來(lái)運(yùn)行解析器,并將提取出來(lái)的數(shù)據(jù)放在一個(gè)argparse.Namespace對(duì)象中。例如:
# 解析參數(shù) args = parser.parse_args() # 使用參數(shù) if args.verbose: print(f"Processing {args.filename} in verbose mode") else: print(f"Processing {args.filename}")
如果用戶(hù)給出了無(wú)效或不符合規(guī)范的參數(shù),argparse會(huì)自動(dòng)報(bào)錯(cuò)并退出程序。如果用戶(hù)沒(méi)有給出任何參數(shù)或給出了-h或–help選項(xiàng),argparse會(huì)自動(dòng)打印幫助信息并退出程序。
子命令
有時(shí)候,你可能想要讓你的程序支持不同的子命令,就像git或pip那樣。例如:
$ git clone https://github.com/python/cpython.git $ git status $ git commit -m "some message"
要實(shí)現(xiàn)這個(gè)功能,你可以使用add_subparsers()方法來(lái)創(chuàng)建一個(gè)子解析器,并為每個(gè)子命令添加一個(gè)子解析器。例如:
# 創(chuàng)建一個(gè)主解析器 parser = argparse.ArgumentParser(description="A simple calculator") # 創(chuàng)建一個(gè)子解析器 subparsers = parser.add_subparsers(help="sub-command help") # 為每個(gè)子命令添加一個(gè)子解析器 parser_add = subparsers.add_parser("add", help="add two numbers") parser_add.add_argument("x", type=int, help="the first number") parser_add.add_argument("y", type=int, help="the second number") parser_sub = subparsers.add_parser("sub", help="subtract two numbers") parser_sub.add_argument("x", type=int, help="the first number") parser_sub.add_argument("y", type=int, help="the second number") parser_mul = subparsers.add_parser("mul", help="multiply two numbers") parser_mul.add_argument("x", type=int, help="the first number") parser_mul.add_argument("y", type=int, help="the second number") parser_div = subparsers.add_parser("div", help="divide two numbers") parser_div.add_argument("x", type=int, help="the first number") parser_div.add_argument("y", type=int, help="the second number") # 解析參數(shù) args = parser.parse_args() # 使用參數(shù) if args.subcommand == "add": print(args.x + args.y) elif args.subcommand == "sub": print(args.x - args.y) elif args.subcommand == "mul": print(args.x * args.y) elif args.subcommand == "div": print(args.x / args.y)
互斥組
有時(shí)候,你可能想要讓你的程序只接受一些互斥的選項(xiàng),即不能同時(shí)出現(xiàn)的選項(xiàng)。例如:
$ python3 prog.py -a $ python3 prog.py -b $ python3 prog.py -a -b # 錯(cuò)誤
要實(shí)現(xiàn)這個(gè)功能,你可以使用add_mutually_exclusive_group()方法來(lái)創(chuàng)建一個(gè)互斥組,并為該組添加一些選項(xiàng)。例如:
# 創(chuàng)建一個(gè)解析器 parser = argparse.ArgumentParser(description="A simple program") # 創(chuàng)建一個(gè)互斥組 group = parser.add_mutually_exclusive_group() # 為該組添加一些選項(xiàng) group.add_argument("-a", action="store_true") group.add_argument("-b", action="store_true") # 解析參數(shù) args = parser.parse_args() # 使用參數(shù) if args.a: print("Option A is selected") elif args.b: print("Option B is selected") else: print("No option is selected")
文件類(lèi)型
有時(shí)候,你可能想要讓你的程序接受一個(gè)文件名作為參數(shù),并自動(dòng)打開(kāi)或創(chuàng)建該文件。例如:
$ python3 prog.py input.txt output.txt
要實(shí)現(xiàn)這個(gè)功能,你可以使用argparse.FileType類(lèi)來(lái)指定你的參數(shù)的類(lèi)型,它會(huì)返回一個(gè)類(lèi)似于open()函數(shù)返回的文件對(duì)象。例如:
# 創(chuàng)建一個(gè)解析器 parser = argparse.ArgumentParser(description="A simple program that reads from a file and writes to another file") # 添加兩個(gè)文件類(lèi)型的參數(shù) parser.add_argument("infile", type=argparse.FileType("r"), help="the input file") parser.add_argument("outfile", type=argparse.FileType("w"), help="the output file") # 解析參數(shù) args = parser.parse_args() # 使用參數(shù) for line in args.infile: args.outfile.write(line.upper())
總結(jié)
argparse是Python標(biāo)準(zhǔn)庫(kù)中一個(gè)強(qiáng)大而靈活的模塊,用于解析命令行參數(shù)和生成美觀的幫助文檔。
無(wú)論是簡(jiǎn)單的腳本還是復(fù)雜的應(yīng)用程序,argparse都能幫助開(kāi)發(fā)者輕松地處理各種命令行參數(shù),并提供友好的用戶(hù)界面。
通過(guò)使用argparse,開(kāi)發(fā)者可以定義參數(shù)的類(lèi)型、默認(rèn)值、限制條件以及互斥關(guān)系,從而確保命令行輸入的合法性和一致性。
無(wú)需編寫(xiě)繁瑣的解析代碼,argparse的簡(jiǎn)潔接口使得命令行參數(shù)的處理變得簡(jiǎn)單而愉快。
不僅如此,argparse還能自動(dòng)生成詳細(xì)的幫助文檔,為用戶(hù)提供清晰明了的命令行使用說(shuō)明。
在Python中,argparse被廣泛應(yīng)用于各種項(xiàng)目,成為處理命令行參數(shù)的首選工具。
無(wú)論是初學(xué)者還是有經(jīng)驗(yàn)的開(kāi)發(fā)者,掌握argparse的使用技巧都將極大地提升命令行工具的質(zhì)量和用戶(hù)體驗(yàn)。
到此這篇關(guān)于詳解Python中的argparse模塊的文章就介紹到這了,更多相關(guān)Python的argparse模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景
- Python命令行參數(shù)解析之a(chǎn)rgparse模塊詳解
- Python?內(nèi)置模塊?argparse快速入門(mén)教程
- 深入講解Python命令行解析模塊argparse
- python?argparse的使用步驟(全網(wǎng)最全)
- python中的argparse基本用法(使用步驟)
- python?命令行參數(shù)模塊argparse的實(shí)現(xiàn)
- Python中命令行參數(shù)argparse模塊的使用
- python命令行參數(shù)argparse模塊基本用法詳解
- Python中argparse基本用法小結(jié)
相關(guān)文章
Python Django form 組件動(dòng)態(tài)從數(shù)據(jù)庫(kù)取choices數(shù)據(jù)實(shí)例
這篇文章主要介紹了Python Django form 組件動(dòng)態(tài)從數(shù)據(jù)庫(kù)取choices數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Django一小時(shí)寫(xiě)出賬號(hào)密碼管理系統(tǒng)
這篇文章主要介紹了Django一小時(shí)寫(xiě)出賬號(hào)密碼管理系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04python實(shí)現(xiàn)錄屏功能(親測(cè)好用)
這篇文章主要介紹了使python實(shí)現(xiàn)錄屏功能(親測(cè)好用),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03Python實(shí)現(xiàn)自動(dòng)化處理Word文檔的方法詳解
本文主要介紹了如何使用Python實(shí)現(xiàn)Word文檔的自動(dòng)化處理,包括批量生成Word文檔、在Word文檔中批量進(jìn)行查找和替換、將Word文檔批量轉(zhuǎn)換成PDF等,希望對(duì)你有所幫助2022-08-08python 日志模塊logging的使用場(chǎng)景及示例
這篇文章主要介紹了python 日志模塊logging的使用場(chǎng)景及示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01對(duì)Python中for復(fù)合語(yǔ)句的使用示例講解
今天小編就為大家分享一篇對(duì)Python中for復(fù)合語(yǔ)句的使用示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Python利用shutil實(shí)現(xiàn)拷貝文件功能
shutil?是一個(gè)?Python?內(nèi)置模塊,該模塊對(duì)文件的復(fù)制、刪除和壓縮等操作都提供了非常方便的支持。本文將利用shutil實(shí)現(xiàn)拷貝文件功能,需要的可以參考一下2022-07-07