Python?argparse傳遞外部參數(shù)詳細(xì)教程
什么是 argparse?
argparse 是 Python 標(biāo)準(zhǔn)庫中用于解析命令行參數(shù)的模塊。它能讓您的 Python 腳本像專業(yè)命令行工具一樣接收和處理用戶輸入的參數(shù),比如:
python train.py --epochs 100 --batch-size 32 --verbose
主要功能
- ? 自動(dòng)生成幫助信息(
-h和--help) - ? 自動(dòng)驗(yàn)證參數(shù)類型和值
- ? 支持必選/可選參數(shù)
- ? 提供友好的錯(cuò)誤提示
應(yīng)用場(chǎng)景
- 數(shù)據(jù)處理腳本:指定輸入輸出文件、處理參數(shù)
- 機(jī)器學(xué)習(xí)訓(xùn)練:傳遞超參數(shù)、模型配置
- 自動(dòng)化工具:控制腳本行為、運(yùn)行模式
核心概念
在開始示例之前,先了解幾個(gè)重要概念:
1. 參數(shù)類型
- 位置參數(shù):必須提供,按順序傳遞(如
python script.py file.txt) - 可選參數(shù):以
-或--開頭,可以不提供(如--output result.txt)
2. 常用參數(shù)選項(xiàng)
| 參數(shù) | 說明 | 示例 |
|---|---|---|
type | 指定參數(shù)類型 | type=int 只接受整數(shù) |
default | 默認(rèn)值 | default=10 不提供時(shí)使用 10 |
help | 幫助信息 | help='輸入文件路徑' |
action='store_true' | 布爾標(biāo)志,出現(xiàn)即為 True | 用于 --verbose、--debug 等開關(guān) |
choices | 限定可選值 | choices=['A', 'B', 'C'] |
nargs | 接受多個(gè)值 | nargs='+' 至少一個(gè)值 |
3. 短選項(xiàng) vs 長(zhǎng)選項(xiàng)
- 短選項(xiàng):?jiǎn)蝹€(gè)字母,用
-開頭,如-v - 長(zhǎng)選項(xiàng):完整單詞,用
--開頭,如--verbose - 通常成對(duì)出現(xiàn),提供簡(jiǎn)寫和可讀性
入門示例
示例 1:最簡(jiǎn)單的開始
目標(biāo):創(chuàng)建一個(gè)程序,接收一個(gè)名字并打印問候語。
新手提示:這是最基礎(chǔ)的例子,只用一個(gè)位置參數(shù)。位置參數(shù)是必需的,用戶必須提供。
import argparse
# 第 1 步:創(chuàng)建解析器
parser = argparse.ArgumentParser(description='簡(jiǎn)單的問候程序')
# 第 2 步:添加參數(shù)
parser.add_argument('name', help='你的名字')
# 第 3 步:解析參數(shù)
args = parser.parse_args()
# 第 4 步:使用參數(shù)
print(f"你好, {args.name}!")
運(yùn)行效果:
python script.py 張三 # 輸出:你好, 張三! python script.py # 錯(cuò)誤:the following arguments are required: name python script.py -h # 顯示幫助信息
關(guān)鍵要點(diǎn):
- 使用三步走:創(chuàng)建解析器 → 添加參數(shù) → 解析參數(shù)
- 參數(shù)通過
args.參數(shù)名訪問 - 自動(dòng)生成
-h幫助
示例 2:添加可選參數(shù)
目標(biāo):在上個(gè)例子基礎(chǔ)上,讓用戶可以自定義問候語。
提示:這次引入可選參數(shù)??蛇x參數(shù)以 -- 開頭,不提供時(shí)會(huì)使用默認(rèn)值。我們用 default 參數(shù)來設(shè)置默認(rèn)值。
import argparse
parser = argparse.ArgumentParser(description='可自定義的問候程序')
# 位置參數(shù)(必需)
parser.add_argument('name', help='你的名字')
# 可選參數(shù)(有默認(rèn)值)
parser.add_argument('--greeting',
default='你好',
help='問候語(默認(rèn):你好)')
args = parser.parse_args()
print(f"{args.greeting}, {args.name}!")
運(yùn)行效果:
python script.py 張三 # 輸出:你好, 張三! python script.py 張三 --greeting 早上好 # 輸出:早上好, 張三!
關(guān)鍵要點(diǎn):
- 可選參數(shù)用
--開頭 default設(shè)置默認(rèn)值- 可以不提供,不影響程序運(yùn)行
示例 3:類型驗(yàn)證
目標(biāo):編寫一個(gè)計(jì)算器,計(jì)算兩個(gè)數(shù)的和。
新手提示:現(xiàn)在引入 type 參數(shù)。argparse 默認(rèn)把所有輸入當(dāng)作字符串,使用 type=int 可以自動(dòng)轉(zhuǎn)換為整數(shù),并驗(yàn)證輸入是否合法。
import argparse
parser = argparse.ArgumentParser(description='簡(jiǎn)單計(jì)算器')
# 指定參數(shù)類型為整數(shù)
parser.add_argument('num1', type=int, help='第一個(gè)數(shù)字')
parser.add_argument('num2', type=int, help='第二個(gè)數(shù)字')
args = parser.parse_args()
result = args.num1 + args.num2
print(f"{args.num1} + {args.num2} = {result}")
運(yùn)行效果:
python script.py 10 20 # 輸出:10 + 20 = 30 python script.py 10 abc # 錯(cuò)誤:argument num2: invalid int value: 'abc'
關(guān)鍵要點(diǎn):
type=int自動(dòng)轉(zhuǎn)換并驗(yàn)證- 常用類型:
int、float、str - 輸入不符合類型時(shí)自動(dòng)報(bào)錯(cuò)
示例 4:布爾開關(guān)
目標(biāo):添加一個(gè) --verbose 開關(guān),控制是否顯示詳細(xì)信息。
新手提示:這里介紹布爾標(biāo)志。使用 action='store_true' 后,該參數(shù)不需要值,只要在命令行中出現(xiàn),就會(huì)被設(shè)置為 True;不出現(xiàn)就是 False。這常用于 --verbose(詳細(xì)模式)、--debug(調(diào)試模式)等開關(guān)。
import argparse
parser = argparse.ArgumentParser(description='帶詳細(xì)模式的計(jì)算器')
parser.add_argument('num1', type=int, help='第一個(gè)數(shù)字')
parser.add_argument('num2', type=int, help='第二個(gè)數(shù)字')
# 布爾開關(guān):出現(xiàn)即為 True
parser.add_argument('--verbose',
action='store_true',
help='顯示詳細(xì)計(jì)算過程')
args = parser.parse_args()
result = args.num1 + args.num2
if args.verbose:
print(f"詳細(xì)信息:{args.num1} + {args.num2} = {result}")
else:
print(result)
運(yùn)行效果:
python script.py 10 20 # 輸出:30 python script.py 10 20 --verbose # 輸出:詳細(xì)信息:10 + 20 = 30
關(guān)鍵要點(diǎn):
action='store_true'創(chuàng)建布爾開關(guān)- 不需要傳值,出現(xiàn)即為
True - 適合控制程序行為的開關(guān)
示例 5:短選項(xiàng)和長(zhǎng)選項(xiàng)
目標(biāo):為參數(shù)同時(shí)提供簡(jiǎn)寫(短選項(xiàng))和完整名稱(長(zhǎng)選項(xiàng))。
新手提示:專業(yè)的命令行工具通常同時(shí)提供短選項(xiàng)(如 -v)和長(zhǎng)選項(xiàng)(如 --verbose)。短選項(xiàng)方便快速輸入,長(zhǎng)選項(xiàng)增強(qiáng)可讀性。只需在 add_argument() 中同時(shí)指定兩個(gè)即可。
import argparse
parser = argparse.ArgumentParser(description='文件計(jì)數(shù)器')
# 同時(shí)提供短選項(xiàng)和長(zhǎng)選項(xiàng)
parser.add_argument('file', help='輸入文件路徑')
parser.add_argument('-c', '--count',
type=int,
default=10,
help='顯示前 N 行(默認(rèn):10)')
parser.add_argument('-v', '--verbose',
action='store_true',
help='顯示詳細(xì)信息')
args = parser.parse_args()
print(f"將讀取文件: {args.file}")
print(f"顯示行數(shù): {args.count}")
if args.verbose:
print("詳細(xì)模式已啟用")
運(yùn)行效果:
python script.py data.txt -c 5 -v # 等同于:python script.py data.txt --count 5 --verbose # 輸出: # 將讀取文件: data.txt # 顯示行數(shù): 5 # 詳細(xì)模式已啟用
關(guān)鍵要點(diǎn):
- 短選項(xiàng)和長(zhǎng)選項(xiàng)可以同時(shí)使用
- 兩種形式完全等價(jià)
- 約定:短選項(xiàng)用單字母,長(zhǎng)選項(xiàng)用完整單詞
示例 6:限定可選值
目標(biāo):創(chuàng)建一個(gè)日志程序,讓用戶選擇日志級(jí)別。
新手提示:當(dāng)參數(shù)只能從幾個(gè)固定值中選擇時(shí),使用 choices 參數(shù)。這樣 argparse 會(huì)自動(dòng)驗(yàn)證輸入,并在幫助信息中顯示所有可選項(xiàng)。
import argparse
parser = argparse.ArgumentParser(description='日志記錄器')
parser.add_argument('message', help='日志消息')
parser.add_argument('-l', '--level',
choices=['debug', 'info', 'warning', 'error'],
default='info',
help='日志級(jí)別')
args = parser.parse_args()
print(f"[{args.level.upper()}] {args.message}")
運(yùn)行效果:
python script.py "服務(wù)器啟動(dòng)成功" --level info # 輸出:[INFO] 服務(wù)器啟動(dòng)成功 python script.py "出錯(cuò)了" --level critical # 錯(cuò)誤:argument -l/--level: invalid choice: 'critical' # (choose from 'debug', 'info', 'warning', 'error')
關(guān)鍵要點(diǎn):
choices限定參數(shù)只能從列表中選擇- 自動(dòng)驗(yàn)證和生成錯(cuò)誤提示
- 幫助信息會(huì)顯示所有可選值
示例 7:實(shí)戰(zhàn)應(yīng)用
目標(biāo):創(chuàng)建一個(gè)簡(jiǎn)單的文本處理工具,綜合運(yùn)用前面的知識(shí)。
新手提示:這是一個(gè)綜合示例,整合了位置參數(shù)、可選參數(shù)、類型驗(yàn)證、布爾開關(guān)等。實(shí)際項(xiàng)目中的 argparse 使用就是這樣的結(jié)構(gòu)。
import argparse
parser = argparse.ArgumentParser(
description='文本處理工具',
epilog='示例: python script.py input.txt --output result.txt --uppercase'
)
# 輸入文件(必需)
parser.add_argument('input', help='輸入文件路徑')
# 輸出文件(可選,有默認(rèn)值)
parser.add_argument('-o', '--output',
default='output.txt',
help='輸出文件路徑(默認(rèn):output.txt)')
# 處理選項(xiàng)
parser.add_argument('--uppercase',
action='store_true',
help='轉(zhuǎn)換為大寫')
parser.add_argument('--limit',
type=int,
help='只處理前 N 行')
parser.add_argument('-v', '--verbose',
action='store_true',
help='顯示處理進(jìn)度')
args = parser.parse_args()
# 實(shí)際使用
if args.verbose:
print(f"讀取文件: {args.input}")
print(f"輸出到: {args.output}")
if args.uppercase:
print("將轉(zhuǎn)換為大寫")
if args.limit:
print(f"只處理前 {args.limit} 行")
# 這里添加實(shí)際的文件處理邏輯
print("處理完成!")
運(yùn)行效果:
python script.py data.txt -o result.txt --uppercase --limit 100 -v # 輸出: # 讀取文件: data.txt # 輸出到: result.txt # 將轉(zhuǎn)換為大寫 # 只處理前 100 行 # 處理完成!
關(guān)鍵要點(diǎn):
- 實(shí)際應(yīng)用中會(huì)組合多種參數(shù)類型
epilog可以在幫助信息末尾添加使用示例- 結(jié)構(gòu)清晰:先必需參數(shù),再可選參數(shù),最后開關(guān)
其他選擇
sys.argv - 最簡(jiǎn)單
當(dāng)腳本只需要1-2個(gè)簡(jiǎn)單參數(shù)時(shí):
import sys filename = sys.argv[1] # 直接獲取第一個(gè)參數(shù)
適用場(chǎng)景:快速腳本,參數(shù)極少
總結(jié):argparse 是編寫專業(yè)命令行工具的標(biāo)準(zhǔn)方案。掌握本文的 7 個(gè)示例,就能處理 絕對(duì)多數(shù)日常需求。
總結(jié)
到此這篇關(guān)于Python argparse傳遞外部參數(shù)的文章就介紹到這了,更多相關(guān)Python argparse傳遞外部參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從零帶你使用Python實(shí)現(xiàn)RAG(檢索增強(qiáng)生成)系統(tǒng)
檢索增強(qiáng)生成(Retrieval-Augmented Generation, RAG)是當(dāng)下最熱門的 AI 應(yīng)用架構(gòu)之一,本文將帶你從零開始,用 Python 完整實(shí)現(xiàn)一個(gè) RAG 系統(tǒng),涵蓋文檔加載,文本分塊,向量嵌入,語義檢索與生成回答的完整鏈路2026-04-04
Python實(shí)現(xiàn)中一次讀取多個(gè)值的方法
下面小編就為大家分享一篇Python實(shí)現(xiàn)中一次讀取多個(gè)值的方法,具有很好的參考價(jià)值,我對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04

