python中argparse模塊用法詳解(小白入門)
argparse 詳細(xì)講解
argparse 是 Python 標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,專門用來處理命令行參數(shù)。
什么是命令行參數(shù)?
命令行參數(shù)就是你在運(yùn)行程序時(shí),在程序名字后面加的一些額外信息。
舉例說明:
# 沒有參數(shù) python main.py # 有參數(shù) python main.py --debug --batch_size 32 --lr 0.001
這里的 --debug、--batch_size 32、--lr 0.001 就是命令行參數(shù)。
一、 含義與簡(jiǎn)介
argparse 是 Python 標(biāo)準(zhǔn)庫(kù)(從 Python 3.2 開始引入,替代了舊的 optparse 和 getopt)中的一個(gè)模塊,用于解析命令行參數(shù)。
簡(jiǎn)單來說,當(dāng)你在終端或命令提示符中運(yùn)行一個(gè) Python 腳本時(shí),你可能會(huì)在腳本名后面輸入一些額外的信息,例如:
python my_script.py --input data.txt --verbose --output results.json
argparse 的作用就是:
- 解析這些跟在腳本名后面的參數(shù)(如
--input,data.txt等)。 - 驗(yàn)證這些參數(shù)是否符合預(yù)期(例如,檢查文件是否存在,參數(shù)類型是否正確)。
- 自動(dòng)生成幫助和使用說明(當(dāng)用戶使用
-h或--help時(shí))。 - 將這些參數(shù)轉(zhuǎn)換為 Python 對(duì)象(如字符串、整數(shù)、列表等),方便你在代碼中使用。
它的核心目標(biāo)是讓您的腳本擁有一個(gè)標(biāo)準(zhǔn)、專業(yè)、用戶友好的命令行界面。
二、核心概念與使用規(guī)則
使用 argparse 通常遵循以下四個(gè)步驟:
- 創(chuàng)建一個(gè)解析器對(duì)象 - 這是所有功能的起點(diǎn)。
- 添加參數(shù) - 告訴解析器你期望哪些參數(shù)。
- 解析參數(shù) - 讓解析器去分析用戶輸入的命令行。
- 使用參數(shù) - 在代碼中使用解析后的結(jié)果。
三、 語法規(guī)范與詳細(xì)用法
讓我們通過一個(gè)具體的例子來學(xué)習(xí),并逐步擴(kuò)展其功能。
步驟 1:導(dǎo)入模塊并創(chuàng)建解析器
import argparse # 創(chuàng)建 ArgumentParser 對(duì)象,description 參數(shù)用于描述程序的功能,會(huì)顯示在幫助信息中。 parser = argparse.ArgumentParser(description='這是一個(gè)處理文件的示例程序。')
ArgumentParser是主要的類description是程序的描述,會(huì)在幫助信息中顯示
步驟 2:添加參數(shù)
這是最核心的一步。使用 add_argument() 方法來定義參數(shù)。
參數(shù)主要分為兩大類:
- 位置參數(shù):必須提供的參數(shù),其含義由它在命令行中的位置決定。
- 例如:
cp source_file dest_file中的source_file和dest_file。
- 例如:
- 可選參數(shù):以
-或--開頭的參數(shù),順序可以顛倒。- 例如:
ls -l -a或ls --all --long。
- 例如:
a) 添加位置參數(shù)(必須提供的參數(shù))
使用 add_argument(),第一個(gè)參數(shù)就是參數(shù)的名字(不帶 -)。
# 添加一個(gè)位置參數(shù) ‘filename'
parser.add_argument('filename', help='要處理的輸入文件') # help 參數(shù)用于生成幫助信息
b) 添加可選參數(shù)(以 - 或 – 開頭)
使用 add_argument(),第一個(gè)參數(shù)是短選項(xiàng)(如 -f)或長(zhǎng)選項(xiàng)(如 --file),或者兩者都提供。
短參數(shù) :
形式:?jiǎn)蝹€(gè)短橫線 - 后跟單個(gè)字母
示例 :v, -h, -f
長(zhǎng)參數(shù):
形式:雙短橫線 – 后跟完整單詞
示例:–verbose, --help, --file
推薦使用:同時(shí)提供短參數(shù)和長(zhǎng)參數(shù)
# 添加一個(gè)可選參數(shù) ‘--output' (短選項(xiàng) ‘-o‘)
parser.add_argument('-o', '--output', help='輸出文件的路徑')
# 添加一個(gè)布爾標(biāo)志,action=‘store_true' 表示如果指定了這個(gè)參數(shù),其值為 True,否則為 False。
parser.add_argument('-v', '--verbose', action='store_true', help='顯示詳細(xì)處理信息')
# 指定參數(shù)類型,比如整數(shù)
parser.add_argument('-n', '--number', type=int, help='一個(gè)數(shù)字參數(shù)', default=1) # default 指定默認(rèn)值
# 限制參數(shù)的選擇范圍
parser.add_argument('--mode', choices=['fast', 'slow', 'debug'], default='fast', help='程序運(yùn)行模式')
add_argument 常用參數(shù)詳解:
name/flags: 參數(shù)的名字或標(biāo)簽列表(如'filename'或['-o', '--output'])。action: 當(dāng)參數(shù)在命令行中出現(xiàn)時(shí),要采取的動(dòng)作。'store': 默認(rèn)動(dòng)作,存儲(chǔ)參數(shù)的值。'store_true'/'store_false': 存儲(chǔ)True或False。'store_const': 存儲(chǔ)一個(gè)被const參數(shù)指定的常量值。'append': 將同一個(gè)參數(shù)出現(xiàn)的多個(gè)值存儲(chǔ)到一個(gè)列表中。
type: 參數(shù)應(yīng)該被轉(zhuǎn)換成的類型(如int,float,str)。default: 如果參數(shù)未提供,則使用此默認(rèn)值。choices: 一個(gè)容器,參數(shù)的值必須是其中的一個(gè)。required: 對(duì)于可選參數(shù),是否必須提供(True/False)。慎用,因?yàn)檫@違反了“可選”的初衷。help: 參數(shù)的簡(jiǎn)要描述。
add_argument 方法的詳細(xì)參數(shù)
常用參數(shù):
| 參數(shù)名 | 作用 | 示例 |
|---|---|---|
name/flags | 參數(shù)名稱 | '--lr' 或 ['-l', '--lr'] |
type | 參數(shù)類型 | int, float, str |
default | 默認(rèn)值 | default=32 |
help | 幫助信息 | help='學(xué)習(xí)率' |
action | 動(dòng)作類型 | 'store_true', 'store_const' |
choices | 可選值列表 | choices=[1, 2, 3] |
required | 是否必須 | required=True |
action 參數(shù)詳解:
# store_true: 如果指定了該參數(shù),就存儲(chǔ) True,否則存儲(chǔ) False
parser.add_argument('--debug', action='store_true')
# python script.py --debug → args.debug = True
# python script.py → args.debug = False
# store_const: 存儲(chǔ)一個(gè)固定值
parser.add_argument('--mode', action='store_const', const='fast')
# python script.py --mode → args.mode = 'fast'
# store: 存儲(chǔ)提供的值(默認(rèn)動(dòng)作)
parser.add_argument('--name', type=str)
# python script.py --name Alice → args.name = 'Alice'
# append: 將多個(gè)值收集到列表中
parser.add_argument('--add', action='append')
# python script.py --add a --add b → args.add = ['a', 'b']
步驟 3:解析參數(shù)
調(diào)用 parse_args() 方法。它會(huì)自動(dòng)查看 sys.argv(即命令行輸入),進(jìn)行解析,并返回一個(gè)包含所有參數(shù)值的命名空間對(duì)象。
args = parser.parse_args() # 現(xiàn)在,你可以通過 args.參數(shù)名 來訪問每個(gè)參數(shù)的值
步驟 4:使用參數(shù)
現(xiàn)在,你可以在你的程序邏輯中使用這些解析好的參數(shù)了。
print(f"正在處理文件: {args.filename}")
if args.verbose:
print("詳細(xì)模式已開啟。")
if args.output:
print(f"結(jié)果將輸出到: {args.output}")
print(f"運(yùn)行模式為: {args.mode}")
print(f"數(shù)字參數(shù)是: {args.number}")
四、完整示例與演示
完整示例1
讓我們把所有代碼組合起來,文件名為 example.py。
import argparse
# 1. 創(chuàng)建解析器
parser = argparse.ArgumentParser(description='一個(gè)強(qiáng)大的文件處理工具。')
# 2. 添加參數(shù)
parser.add_argument('filename', help='輸入文件的名稱')
parser.add_argument('-o', '--output', help='輸出文件的路徑')
parser.add_argument('-v', '--verbose', action='store_true', help='開啟詳細(xì)輸出')
parser.add_argument('-n', '--number', type=int, default=1, help='處理的次數(shù) (默認(rèn): 1)')
parser.add_argument('--mode', choices=['fast', 'slow', 'debug'], default='fast', help='選擇運(yùn)行模式')
# 3. 解析參數(shù)
args = parser.parse_args()
# 4. 使用參數(shù)
print(f"輸入文件: {args.filename}")
if args.verbose:
print("狀態(tài): 詳細(xì)模式已激活。")
print(f"正在以 '{args.mode}' 模式運(yùn)行。")
print(f"將處理 {args.number} 次。")
if args.output:
print(f"輸出將保存至: {args.output}")
# ... 這里是你實(shí)際的程序邏輯,例如讀寫文件等 ...
在命令行中的運(yùn)行演示:
獲取幫助(這是
argparse自動(dòng)提供的強(qiáng)大功能):python example.py -h
輸出:
usage: example.py [-h] [-o OUTPUT] [-v] [-n NUMBER] [--mode {fast,slow,debug}] filename 一個(gè)強(qiáng)大的文件處理工具。 positional arguments: filename 輸入文件的名稱 optional arguments: -h, --help show this help message and exit -o OUTPUT, --output OUTPUT 輸出文件的路徑 -v, --verbose 開啟詳細(xì)輸出 -n NUMBER, --number NUMBER 處理的次數(shù) (默認(rèn): 1) --mode {fast,slow,debug} 選擇運(yùn)行模式 (默認(rèn): fast)正常使用:
python example.py data.txt -o out.json -v -n 5 --mode slow
輸出:
輸入文件: data.txt 狀態(tài): 詳細(xì)模式已激活。 正在以 'slow' 模式運(yùn)行。 將處理 5 次。 輸出將保存至: out.json
使用錯(cuò)誤參數(shù)(
argparse會(huì)自動(dòng)報(bào)錯(cuò)):python example.py # 錯(cuò)誤: error: the following arguments are required: filename python example.py data.txt --mode superfast # 錯(cuò)誤: error: argument --mode: invalid choice: 'superfast' (choose from 'fast', 'slow', 'debug')
完整示例2
import argparse
def main():
# 1. 創(chuàng)建解析器
parser = argparse.ArgumentParser(
description='一個(gè)簡(jiǎn)單的文件處理程序',
epilog='示例: python script.py input.txt --verbose --output result.txt'
)
# 2. 添加位置參數(shù)(必須提供)
parser.add_argument('input_file', help='要處理的輸入文件')
# 3. 添加可選參數(shù)
parser.add_argument('--output', '-o',
type=str,
default='output.txt',
help='輸出文件名(默認(rèn): output.txt)')
parser.add_argument('--verbose', '-v',
action='store_true',
help='顯示詳細(xì)處理信息')
parser.add_argument('--count', '-c',
type=int,
default=1,
choices=[1, 2, 3, 4, 5],
help='處理次數(shù)(1-5,默認(rèn): 1)')
# 4. 解析參數(shù)
args = parser.parse_args()
# 5. 使用參數(shù)
print(f"輸入文件: {args.input_file}")
print(f"輸出文件: {args.output}")
print(f"詳細(xì)模式: {args.verbose}")
print(f"處理次數(shù): {args.count}")
# 模擬處理邏輯
if args.verbose:
print("開始處理文件...")
print(f"正在處理: {args.input_file}")
print(f"將保存到: {args.output}")
print(f"將處理 {args.count} 次")
if __name__ == '__main__':
main()
運(yùn)行示例:
# 查看幫助 python script.py -h # 輸出: # usage: script.py [-h] [--output OUTPUT] [--verbose] [--count COUNT] input_file # # 一個(gè)簡(jiǎn)單的文件處理程序 # # positional arguments: # input_file 要處理的輸入文件 # # optional arguments: # -h, --help show this help message and exit # --output OUTPUT, -o OUTPUT # 輸出文件名(默認(rèn): output.txt) # --verbose, -v 顯示詳細(xì)處理信息 # --count COUNT, -c COUNT # 處理次數(shù)(1-5,默認(rèn): 1) # # 示例: python script.py input.txt --verbose --output result.txt # 正常運(yùn)行 python script.py data.txt --verbose --output result.txt --count 3 # 輸出: # 輸入文件: data.txt # 輸出文件: result.txt # 詳細(xì)模式: True # 處理次數(shù): 3 # 開始處理文件... # 正在處理: data.txt # 將保存到: result.txt # 將處理 3 次
五、常見問題解答
1. 為什么有些參數(shù)用--,有些不用?
- 用
--的是可選參數(shù),可以不提供 - 不用
--的是位置參數(shù),必須提供
2.action='store_true'是什么意思?
意思是:“如果用戶提供了這個(gè)參數(shù),就把它設(shè)為 True;如果沒提供,就設(shè)為 False”
3. 參數(shù)名中的-和_有什么區(qū)別?
在代碼中使用時(shí),--batch-size 會(huì)變成 args.batch_size(橫線變下劃線)
4. 如何讓某個(gè)參數(shù)是必須的?
parser.add_argument('--required_arg', required=True, help='這個(gè)參數(shù)必須提供')
六、總結(jié)
argparse是 Python 中用于構(gòu)建命令行接口的標(biāo)準(zhǔn)工具。- 使用流程:創(chuàng)建解析器 → 添加參數(shù) → 解析參數(shù) → 使用結(jié)果。
- 它能自動(dòng)處理
-h/--help幫助信息和錯(cuò)誤提示,大大提升了腳本的易用性和健壯性。 - 通過
add_argument()方法的豐富選項(xiàng),你可以定義各種復(fù)雜的參數(shù)規(guī)則。
對(duì)于絕大多數(shù)命令行程序來說,argparse 的功能已經(jīng)完全足夠。它是每個(gè) Python 開發(fā)者都應(yīng)該掌握的基礎(chǔ)庫(kù)之一。
argparse 就像是一個(gè)智能的"問卷調(diào)查系統(tǒng)":
- 設(shè)計(jì)問卷 - 用
ArgumentParser和add_argument定義問題 - 用戶填寫 - 用戶在命令行輸入?yún)?shù)
- 自動(dòng)批改 -
parse_args()自動(dòng)解析并檢查答案 - 獲取結(jié)果 - 通過
args.參數(shù)名獲取用戶的選擇
到此這篇關(guān)于python中argparse模塊用法的文章就介紹到這了,更多相關(guān)python中argparse模塊用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django中select_related查詢優(yōu)化的具體實(shí)現(xiàn)
本文介紹了Django ORM中的N+1查詢問題及其解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
關(guān)于Python排序sort()函數(shù)和sorted()函數(shù)
這篇文章主要介紹了關(guān)于Python排序sort()函數(shù)和sorted()函數(shù),利用Python中的內(nèi)置函數(shù)去實(shí)現(xiàn)直接排序,需要的朋友可以參考下2023-04-04
用Django實(shí)現(xiàn)一個(gè)可運(yùn)行的區(qū)塊鏈應(yīng)用
這篇文章主要介紹了用Django實(shí)現(xiàn)一個(gè)可運(yùn)行的區(qū)塊鏈應(yīng)用,需要的朋友可以參考下2018-03-03
淺談Selenium+Webdriver 常用的元素定位方式
這篇文章主要介紹了淺談Selenium+Webdriver 常用的元素定位方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

