欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中argparse模塊命令行參數(shù)詳細解析

 更新時間:2025年08月08日 10:23:00   作者:AI手記叨叨  
本文系統(tǒng)介紹Python?argparse模塊,涵蓋其核心功能:解析命令行參數(shù)、自動生成幫助文檔、支持位置參數(shù)與可選參數(shù)、提供類型驗證及錯誤處理、實現(xiàn)子命令系統(tǒng)等,幫助開發(fā)者創(chuàng)建用戶友好的命令行工具,需要的朋友跟隨小編一起學習吧

一、argparse的主要功能

argparse 是 Python 標準庫中用于解析命令行參數(shù)的模塊,主要包括:

  1. 自動生成幫助和使用信息
  2. 支持位置參數(shù)和可選參數(shù)
  3. 多種參數(shù)類型和驗證與子命令系統(tǒng)支持
  4. 自動錯誤處理

通過合理使用 argparse,可以輕松創(chuàng)建用戶友好的命令行工具,提高腳本的可用性和可維護性。

二、自動生成幫助和使用信息

Python 的 argparse 模塊能夠自動生成幫助和使用信息。

1. 基本用法

使用 argparse 創(chuàng)建解析器并添加參數(shù)后,它會自動處理 -h 或 --help 參數(shù)并顯示幫助信息:

import argparse
# 創(chuàng)建解析器
parser = argparse.ArgumentParser(description='這是一個示例程序')
# 添加參數(shù)
parser.add_argument('filename', help='輸入文件名')
parser.add_argument('-v', '--verbose', action='store_true', help='顯示詳細輸出')
parser.add_argument('--output', help='輸出文件名')
# 解析參數(shù)
args = parser.parse_args()

運行這個腳本并加上 -h 或 --help 參數(shù):

python script.py -h

自動生成的幫助信息:

usage: script.py [-h] [-v] [--output OUTPUT] filename
這是一個示例程序
positional arguments:
  filename         輸入文件名
optional arguments:
  -h, --help       show this help message and exit
  -v, --verbose    顯示詳細輸出
  --output OUTPUT  輸出文件名

2. 自定義幫助信息

程序描述:通過 ArgumentParser 的 description 參數(shù)

parser = argparse.ArgumentParser(description='這是一個詳細的程序描述')

參數(shù)幫助:通過 add_argument 的 help 參數(shù)

parser.add_argument('--input', help='指定輸入文件路徑')

用法示例:通過 ArgumentParser 的 epilog 參數(shù)添加結尾文本

parser = argparse.ArgumentParser(
    description='程序描述',
    epilog='示例:\n  python script.py input.txt --output result.txt'
)

自定義幫助選項:通過 add_help 參數(shù)禁用默認幫助或自定義幫助選項

parser = argparse.ArgumentParser(add_help=False)  # 禁用默認幫助
parser.add_argument('-?', action='help', help='顯示幫助信息')  # 自定義幫助選項

3. 高級格式化

argparse 還允許通過 formatter_class 參數(shù)自定義幫助信息的格式:

# 保留空白字符和換行
parser = argparse.ArgumentParser(
    formatter_class=argparse.RawDescriptionHelpFormatter,
    description='''\
        第一行描述
        第二行描述
            縮進的內(nèi)容'''
)
# 更緊湊的格式
parser = argparse.ArgumentParser(
    formatter_class=argparse.ArgumentDefaultsHelpFormatter
)  # 會顯示參數(shù)的默認值

三、位置參數(shù)和可選參數(shù)

argparse 模塊支持兩種主要類型的參數(shù):位置參數(shù)(positional arguments)和可選參數(shù)(optional arguments),它們在命令行中的使用方式和定義方法有所不同。

1. 位置參數(shù)

位置參數(shù)是必須提供的參數(shù),它們的順序很重要,名稱不需要在命令行中指定。
特點
必須提供:調(diào)用程序時必須指定
順序敏感:參數(shù)值的位置決定其含義
無前綴:不需要使用 - 或 – 前綴
定義方法

parser.add_argument('filename', help='輸入文件名')
parser.add_argument('output_dir', help='輸出目錄')

使用示例

python script.py input.txt output/

input.txt 對應 filename 參數(shù)
output/ 對應 output_dir 參數(shù)
高級用法

# 接受多個值
parser.add_argument('files', nargs='+', help='一個或多個文件')
# 固定數(shù)量參數(shù)
parser.add_argument('coordinates', nargs=2, metavar=('X', 'Y'), help='X和Y坐標')

2. 可選參數(shù)

可選參數(shù)通常以 - 或 – 開頭,可以按任意順序提供。
特點
可選提供:可以省略(除非設置 required=True)
順序無關:可以任意順序指定
有前綴:使用 -(短參數(shù))或 --(長參數(shù))前綴
定義方法

parser.add_argument('-v', '--verbose', action='store_true', help='詳細輸出')
parser.add_argument('-o', '--output', help='輸出文件路徑')
parser.add_argument('--count', type=int, default=1, help='重復次數(shù)')

使用示例

python script.py --verbose -o result.txt
# 或
python script.py -v --output=result.txt

3. 位置參數(shù)與可選參數(shù)對比

特性位置參數(shù)可選參數(shù)
必要性必須提供可選(除非設置 required=True)
前綴- 或 --
順序重要不重要
典型用途主要輸入(如文件名)選項和標志
默認值不常見常見
多值支持常見(nargs=‘+’)也支持

4. 混合使用示例

import argparse
parser = argparse.ArgumentParser(description='文件處理工具')
# 位置參數(shù)
parser.add_argument('source', help='源文件路徑')
parser.add_argument('destination', help='目標路徑')
# 可選參數(shù)
parser.add_argument('-c', '--copy', action='store_true', help='復制模式')
parser.add_argument('-m', '--move', action='store_true', help='移動模式')
parser.add_argument('--size', type=int, choices=[1, 2, 4], help='塊大小(1,2或4KB)')
parser.add_argument('-v', '--verbose', action='count', default=0, 
                   help='輸出詳細程度(-v, -vv, -vvv)')
args = parser.parse_args()
print(f"源: {args.source}")
print(f"目標: {args.destination}")
print(f"模式: {'移動' if args.move else '復制'}")
print(f"詳細級別: {args.verbose}")

四、多種參數(shù)類型和驗證和子命令系統(tǒng)

argparse 提供了多種參數(shù)類型驗證機制,確保用戶輸入符合預期。

1. 基本參數(shù)類型

指定參數(shù)類型

使用 type 參數(shù)可以指定輸入值的類型:

parser.add_argument('--num', type=int, help='整數(shù)參數(shù)')
parser.add_argument('--size', type=float, help='浮點數(shù)參數(shù)')
parser.add_argument('--file', type=argparse.FileType('r'), help='輸入文件')

常用內(nèi)置類型

int: 整數(shù)
float: 浮點數(shù)
str: 字符串(默認)
argparse.FileType(‘r’/‘w’): 文件對象(自動打開)

2. 參數(shù)驗證

范圍驗證

通過自定義函數(shù)或結合 choices 實現(xiàn):

# 使用 choices 限制可選值
parser.add_argument('--color', choices=['red', 'green', 'blue'], help='顏色選擇')
# 自定義驗證函數(shù)
def check_positive(value):
    ivalue = int(value)
    if ivalue <= 0:
        raise argparse.ArgumentTypeError(f"{value} 必須是正數(shù)")
    return ivalue
parser.add_argument('--positive', type=check_positive)

正則表達式驗證

import re
def validate_email(email):
    if not re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', email):
        raise argparse.ArgumentTypeError(f"'{email}' 不是有效的郵箱地址")
    return email
parser.add_argument('--email', type=validate_email)

3. 高級參數(shù)處理

列表參數(shù)

# 接收多個值
parser.add_argument('--nums', nargs='+', type=int, help='多個整數(shù)')
# 固定數(shù)量參數(shù)
parser.add_argument('--coords', nargs=2, metavar=('X', 'Y'), help='X Y 坐標')

布爾參數(shù)

# 開關型參數(shù)
parser.add_argument('--enable', action='store_true', help='啟用功能')
parser.add_argument('--disable', action='store_false', dest='enable', help='禁用功能')
# 另一種方式
parser.add_argument('--flag', action=argparse.BooleanOptionalAction, help='布爾標志')

計數(shù)參數(shù)

parser.add_argument('-v', '--verbose', action='count', default=0, 
                   help='增加輸出詳細程度(如 -vvv)')

4. 參數(shù)組

互斥參數(shù)

group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--create', action='store_true', help='創(chuàng)建模式')
group.add_argument('--delete', action='store_true', help='刪除模式')

參數(shù)分組

parser = argparse.ArgumentParser()
input_group = parser.add_argument_group('輸入選項')
input_group.add_argument('--input-file', help='輸入文件')
input_group.add_argument('--input-dir', help='輸入目錄')
output_group = parser.add_argument_group('輸出選項')
output_group.add_argument('--output-file', help='輸出文件')

5. 子命令

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='command', required=True)
# 創(chuàng)建子命令
parser_create = subparsers.add_parser('create', help='創(chuàng)建資源')
parser_create.add_argument('name', help='資源名稱')
# 刪除子命令
parser_delete = subparsers.add_parser('delete', help='刪除資源')
parser_delete.add_argument('id', type=int, help='資源ID')

6. 默認值和必需參數(shù)

parser.add_argument('--port', type=int, default=8080, help='端口號(默認: 8080)')
parser.add_argument('--username', required=True, help='必須指定用戶名')

7. 自定義參數(shù)處理

class PercentageAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        if not 0 <= values <= 100:
            raise argparse.ArgumentError(self, "必須在0-100之間")
        setattr(namespace, self.dest, values)
parser.add_argument('--percent', type=int, action=PercentageAction, help='百分比(0-100)')

五、自動錯誤處理

argparse 模塊提供了自動錯誤處理功能,能夠檢測和報告用戶輸入中的各種問題。

1. 內(nèi)置自動錯誤檢測

argparse 會自動處理以下常見錯誤情況。

參數(shù)缺失錯誤

# 當必需參數(shù)未提供時
parser.add_argument('required_arg', help='必需參數(shù)')
# 用戶未提供時會自動報錯

無效參數(shù)錯誤

# 當用戶提供了未定義的參數(shù)時
# 例如用戶輸入 --unknown 但未定義此參數(shù)

類型轉(zhuǎn)換錯誤

parser.add_argument('--num', type=int)
# 用戶輸入非數(shù)字時會自動報錯:error: argument --num: invalid int value: 'abc'

參數(shù)值驗證錯誤

parser.add_argument('--size', choices=['S', 'M', 'L'])
# 用戶輸入無效選項時會報錯

2. 自定義錯誤處理

方法1:自定義類型驗證函數(shù)

def positive_int(value):
    try:
        ivalue = int(value)
        if ivalue <= 0:
            raise argparse.ArgumentTypeError(f"{value} 必須是正整數(shù)")
        return ivalue
    except ValueError:
        raise argparse.ArgumentTypeError(f"'{value}' 不是有效整數(shù)")
parser.add_argument('--count', type=positive_int)

方法2:自定義 Action 類

class RangeAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        if not 0 <= values <= 100:
            parser.error(f"{option_string} 必須在0到100之間")
        setattr(namespace, self.dest, values)
parser.add_argument('--percent', type=int, action=RangeAction)

方法3:后解析驗證

def validate_args(args):
    if args.start > args.end:
        raise ValueError("開始值不能大于結束值")
parser.add_argument('--start', type=int)
parser.add_argument('--end', type=int)
args = parser.parse_args()
try:
    validate_args(args)
except ValueError as e:
    parser.error(str(e))

3. 錯誤處理配置

自定義錯誤消息格式

parser = argparse.ArgumentParser(
    formatter_class=argparse.ArgumentDefaultsHelpFormatter,
    epilog="遇到錯誤時請聯(lián)系支持團隊"
)

控制退出行為

try:
    args = parser.parse_args()
except argparse.ArgumentError as e:
    print(f"參數(shù)錯誤: {e}")
    parser.print_help()
    sys.exit(2)  # Unix慣例: 2表示命令行用法錯誤

4. 錯誤處理技巧

顯示更友好的錯誤消息

try:
    args = parser.parse_args()
except argparse.ArgumentTypeError as e:
    print(f"錯誤: {e}")
    print("請輸入 --help 查看用法")
    sys.exit(1)

收集所有錯誤而非立即退出

parser = argparse.ArgumentParser(exit_on_error=False)
try:
    args = parser.parse_args()
except argparse.ArgumentError as e:
    errors.append(str(e))

5. 錯誤處理總結

  1. 提供清晰的錯誤消息:確保錯誤信息能指導用戶正確使用
  2. 一致性:保持錯誤格式一致,便于用戶理解
  3. 防御性編程:對關鍵參數(shù)進行額外驗證
  4. 適當退出代碼:使用標準退出代碼(如2表示用法錯誤)
  5. 記錄錯誤:對于復雜應用,考慮記錄錯誤日志

六、應用與實踐

1. 需要用戶輸入?yún)?shù)的腳本

當 Python 腳本需要接收外部輸入(如文件路徑、配置選項、運行模式等)時,argparse 可以方便地解析命令行參數(shù),而不是硬編碼在代碼中。

示例場景

  • 數(shù)據(jù)處理腳本需要輸入文件路徑
  • 機器學習訓練腳本需要調(diào)整超參數(shù)(如學習率、批次大?。?/li>
  • 日志分析工具需要指定時間范圍或過濾條件

示例代碼

import argparse
parser = argparse.ArgumentParser(description="處理CSV文件")
parser.add_argument("input_file", help="輸入CSV文件路徑")
parser.add_argument("--output", "-o", help="輸出文件路徑(可選)")
parser.add_argument("--delimiter", default=",", help="分隔符(默認:逗號)")
args = parser.parse_args()
print(f"處理文件: {args.input_file}")
if args.output:
    print(f"輸出到: {args.output}")
print(f"分隔符: {args.delimiter}")

2. 需要支持可選參數(shù)和默認值的腳本

如果你的腳本有些參數(shù)是可選的,并且需要默認值,argparse 可以輕松管理這些參數(shù)。

示例場景

  • 爬蟲腳本可以設置 --delay(默認 1 秒)控制請求間隔
  • 圖像處理腳本可以設置 --quality(默認 90)控制輸出質(zhì)量
  • 數(shù)據(jù)庫備份腳本可以設置 --compress(默認 True)控制是否壓縮

示例代碼

import argparse
parser = argparse.ArgumentParser(description="爬蟲腳本")
parser.add_argument("--delay", type=float, default=1.0, help="請求間隔(秒)")
parser.add_argument("--max-pages", type=int, default=10, help="最大爬取頁數(shù)")
parser.add_argument("--headless", action="store_true", help="是否使用無頭模式")
args = parser.parse_args()
print(f"請求間隔: {args.delay} 秒")
print(f"最大爬取頁數(shù): {args.max_pages}")
if args.headless:
    print("使用無頭模式")

3. 需要子命令的 CLI 工具(類似git)

如果你的工具支持多個子命令(如 git commit、git push),argparsesubparsers 功能可以很好地組織代碼。

示例場景

  • 版本控制工具(類似 git
  • 數(shù)據(jù)庫管理工具(db backup、db restore
  • 系統(tǒng)管理工具(system start、system stop

示例代碼

import argparse
parser = argparse.ArgumentParser(description="數(shù)據(jù)庫管理工具")
subparsers = parser.add_subparsers(dest="command", required=True)
# 子命令:backup
backup_parser = subparsers.add_parser("backup", help="備份數(shù)據(jù)庫")
backup_parser.add_argument("--output", required=True, help="備份文件路徑")
backup_parser.add_argument("--compress", action="store_true", help="是否壓縮")
# 子命令:restore
restore_parser = subparsers.add_parser("restore", help="恢復數(shù)據(jù)庫")
restore_parser.add_argument("input", help="備份文件路徑")
args = parser.parse_args()
if args.command == "backup":
    print(f"備份數(shù)據(jù)庫到: {args.output}")
    if args.compress:
        print("啟用壓縮")
elif args.command == "restore":
    print(f"從 {args.input} 恢復數(shù)據(jù)庫")

4. 需要自動生成幫助文檔(--help)

argparse 自動生成 --help 信息,用戶無需手動編寫幫助文本。

示例代碼:

import argparse
parser = argparse.ArgumentParser(description="一個示例程序")
parser.add_argument("input", help="輸入文件")
parser.add_argument("--output", "-o", help="輸出文件")
parser.add_argument("--verbose", "-v", action="store_true", help="顯示詳細日志")
args = parser.parse_args()

運行 python script.py --help 會輸出:

usage: script.py [-h] [--output OUTPUT] [--verbose] input
一個示例程序
positional arguments:
  input                 輸入文件
optional arguments:
  -h, --help            show this help message and exit
  --output OUTPUT, -o OUTPUT
                        輸出文件
  --verbose, -v        顯示詳細日志

5. 需要參數(shù)類型檢查和錯誤提示

argparse 可以自動檢查參數(shù)類型(如 int、float),并提示錯誤。

示例場景:

  • 如果用戶輸入 --count abc(期望是整數(shù)),argparse 會報錯
  • 如果用戶輸入 --mode fast,但 choices=["slow", "medium"],會提示無效選項

示例代碼

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--count", type=int, help="必須輸入整數(shù)")
parser.add_argument("--mode", choices=["slow", "medium", "fast"], default="medium")
args = parser.parse_args()
print(f"Count: {args.count}")
print(f"Mode: {args.mode}")

如果用戶輸入 --count abc,會報錯:

error: argument --count: invalid int value: 'abc'

6. 替代sys.argv手動解析

如果你之前用 sys.argv 手動解析參數(shù),argparse 可以更優(yōu)雅地處理復雜參數(shù)。

sys.argv 手動解析(不推薦)

import sys
if len(sys.argv) < 2:
    print("Usage: script.py <input> [--output OUTPUT]")
    sys.exit(1)
input_file = sys.argv[1]
output_file = None
if "--output" in sys.argv:
    output_index = sys.argv.index("--output") + 1
    if output_index < len(sys.argv):
        output_file = sys.argv[output_index]
print(f"Input: {input_file}")
if output_file:
    print(f"Output: {output_file}")

argparse 解析(推薦)

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("input", help="輸入文件")
parser.add_argument("--output", "-o", help="輸出文件")
args = parser.parse_args()
print(f"Input: {args.input}")
if args.output:
    print(f"Output: {args.output}")

到此這篇關于Python中argparse模塊命令行參數(shù)解析介紹的文章就介紹到這了,更多相關Python argparse命令行參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 利用在Python中數(shù)值模擬研究氣體擴散

    利用在Python中數(shù)值模擬研究氣體擴散

    在 Python 中,可以使用數(shù)值模擬來研究氣體擴散。本文就來通過一些示例為大家講講具體的實現(xiàn)方法,文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下
    2023-01-01
  • python中的進度條工具tqdm及用法示例

    python中的進度條工具tqdm及用法示例

    tqdm 是 Python 中一個非常流行的進度條工具,常用于長時間運行的任務,如數(shù)據(jù)處理、訓練機器學習模型等,下面是 tqdm 的詳細介紹及一些常見用法示例,感興趣的朋友一起看看吧
    2024-06-06
  • Python獲取B站粉絲數(shù)的示例代碼

    Python獲取B站粉絲數(shù)的示例代碼

    這篇文章主要介紹了Python獲取B站粉絲數(shù)的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 關于Python3 類方法、靜態(tài)方法新解

    關于Python3 類方法、靜態(tài)方法新解

    今天小編就為大家分享一篇關于Python3 類方法、靜態(tài)方法新解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python學習之內(nèi)置函數(shù)總結

    Python學習之內(nèi)置函數(shù)總結

    這篇文章主要為大家總結一下python?中常用的是個內(nèi)置函數(shù)的使用方法,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,需要的可以參考一下
    2022-03-03
  • 解決Python字典寫入文件出行首行有空格的問題

    解決Python字典寫入文件出行首行有空格的問題

    下面小編就為大家?guī)硪黄鉀QPython字典寫入文件出行首行有空格的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • python計算最大優(yōu)先級隊列實例

    python計算最大優(yōu)先級隊列實例

    python計算最大優(yōu)先級隊列實例,大家參考使用吧
    2013-12-12
  • 使用Python的turtle模塊畫圖的方法

    使用Python的turtle模塊畫圖的方法

    這篇文章主要介紹了使用Python的turtle模塊畫圖的方法,涉及turtle簡介,運動命令,畫筆控制命令的分享,以及具體操作的步驟,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Python實現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解

    Python實現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解

    這篇文章主要為大家介紹了Python實現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Python?numpy下幾種fft函數(shù)的使用方式

    Python?numpy下幾種fft函數(shù)的使用方式

    numpy中有一個fft的庫,scipy中也有一個fftpack的庫,各自都有fft函數(shù),兩者的用法基本是一致的,下面這篇文章主要給大家介紹了關于Python?numpy下幾種fft函數(shù)的使用方式,需要的朋友可以參考下
    2022-08-08

最新評論