最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用sys.argv與argparse進(jìn)行命令行參數(shù)處理

 更新時間:2026年03月15日 14:40:46   作者:輕華  
在Python開發(fā)中,命令行參數(shù)處理是高頻需求, 小到快速編寫的測試腳本,大到生產(chǎn)級的命令行工具,都需要接收外部傳入的參數(shù)并解析,Python提供了多種處理命令行參數(shù)的方式,其中sys.argv和argparse是最常用的兩種,本文將結(jié)合實戰(zhàn)代碼,深度解析兩者的特點及區(qū)別

一、引言

在 Python 開發(fā)中,命令行參數(shù)處理是高頻需求 —— 小到快速編寫的測試腳本,大到生產(chǎn)級的命令行工具,都需要接收外部傳入的參數(shù)并解析。Python 提供了多種處理命令行參數(shù)的方式,其中sys.argv(sys 模塊內(nèi)置)和argparse(Python 標(biāo)準(zhǔn)庫)是最常用的兩種。本文將結(jié)合實戰(zhàn)代碼,深度解析兩者的特點、區(qū)別及適用場景,幫助開發(fā)者選擇最適合的參數(shù)處理方案。

二、原生輕量:sys.argv 詳解

2.1 sys.argv 基礎(chǔ)認(rèn)知

sys是 Python 的內(nèi)置標(biāo)準(zhǔn)庫,無需額外安裝,sys.argv是其中最核心的命令行參數(shù)處理屬性:

  • sys.argv本質(zhì)是一個列表對象,列表第一個元素是當(dāng)前執(zhí)行的腳本文件名,從第二個元素開始,依次是傳入的命令行參數(shù);
  • 所有參數(shù)均以字符串類型存儲,如需數(shù)值運算需手動類型轉(zhuǎn)換;
  • 無內(nèi)置的參數(shù)解析邏輯,需開發(fā)者手動遍歷、判斷參數(shù)含義。

2.2 實戰(zhàn)解析:基于 sys.argv 的命令行處理(p_work.py)

以下是實戰(zhàn)代碼片段(核心邏輯保留):

import os
import sys

# 遍歷命令行參數(shù)(從索引1開始,跳過腳本名)
for i in range(1, len(sys.argv)):
    if sys.argv[i] == "-h":
        # 手動編寫幫助信息
        print('''本代碼幫助
        -h:用于查詢幫助
        -a:用于獲取python所有關(guān)鍵字
        -c:用于獲取python安裝的所有第三方庫
        -x:代表安裝第三方庫,加入鏡像地址
        -v:查詢python的所有內(nèi)置函數(shù)''')
    if sys.argv[i] == '-a':
        print('開始查詢Python的所有關(guān)鍵字:')
        help("keywords")
    if sys.argv[i] == '-c':
        print('開始查詢Python安裝的所有第三方庫: ')
        os.system('pip list')
    if sys.argv[i] == '-x':
        # 手動獲取后續(xù)參數(shù)(安裝的庫名)
        library_name = sys.argv[i + 1]
        print(f'開始安裝第三方庫:{library_name}')
        os.system(f'pip install {library_name} -i https://mirrors.aliyun.com/pypi/simple/')
    if sys.argv[i] == '-v':
        print('開始查詢python的所有內(nèi)置函數(shù)')
        print(dir(__builtins__))

代碼執(zhí)行示例

執(zhí)行python p_work.py -h,sys.argv的取值為['p_work.py', '-h'],程序遍歷到-h后手動打印幫助信息;執(zhí)行python p_work.py -x requests,sys.argv['p_work.py', '-x', 'requests'],程序手動取i+1位置的requests作為庫名執(zhí)行安裝。

2.3 sys.argv 核心特點

  • ? 原生內(nèi)置:基于 Python 內(nèi)置的sys模塊,無需額外依賴,開箱即用;
  • ? 輕量高效:僅獲取參數(shù)列表,無多余邏輯,執(zhí)行效率高;
  • ? 手動解析:需開發(fā)者遍歷、判斷、切片參數(shù),代碼冗余;
  • ? 無類型校驗:所有參數(shù)均為字符串,數(shù)值運算需手動轉(zhuǎn)換(如int(sys.argv[1]));
  • ? 無自動幫助:幫助信息需手動編寫、打印,易遺漏或格式不統(tǒng)一;
  • ? 容錯性差:參數(shù)順序錯誤、缺失時,需手動做異常處理,否則直接報錯。

三、功能強大:argparse 詳解

3.1 argparse 基礎(chǔ)認(rèn)知

argparse是 Python 3.2 + 納入標(biāo)準(zhǔn)庫的命令行參數(shù)解析模塊(Python 2 需手動安裝),專為復(fù)雜命令行參數(shù)處理設(shè)計:

  • 支持參數(shù)定義、自動解析、類型校驗、默認(rèn)值設(shè)置
  • 自動生成標(biāo)準(zhǔn)化的幫助信息(無需手動編寫);
  • 支持位置參數(shù)、可選參數(shù)、子命令、互斥參數(shù)等高級特性;
  • 內(nèi)置異常處理,參數(shù)錯誤時自動提示并退出。

3.2 實戰(zhàn)解析:基于 argparse 的命令行處理(args.py)

以下是實戰(zhàn)代碼片段:

import argparse

# 1. 創(chuàng)建參數(shù)解析器對象
ap = argparse.ArgumentParser()

# 2. 定義參數(shù)
# 布爾型參數(shù):--sum,傳入則執(zhí)行求和函數(shù)
ap.add_argument("--sum", action="store_true", help="數(shù)字累加")
# 數(shù)值型參數(shù):--aaa/--bbb,默認(rèn)值分別為30/36
ap.add_argument("--aaa", type=int, default=30)
ap.add_argument("--bbb", type=int, default=36)

# 3. 解析命令行參數(shù)
opt = ap.parse_args()

# 4. 業(yè)務(wù)邏輯處理
if opt.sum:
    a = int(input())
    b = int(input())
    print(a + b)
else:
    print(opt.aaa + opt.bbb)

代碼執(zhí)行示例

執(zhí)行python args.py --sum,程序觸發(fā)action="store_true",進(jìn)入手動輸入求和邏輯;執(zhí)行python args.py --aaa 10 --bbb 20,程序自動解析數(shù)值類型參數(shù),輸出30;執(zhí)行python args.py -h,自動生成標(biāo)準(zhǔn)化幫助信息:

3.3 argparse 核心特點

  • ? 功能全面:支持類型校驗、默認(rèn)值、子命令、互斥參數(shù)等;
  • ? 自動解析:無需手動遍歷,解析邏輯由模塊封裝,代碼簡潔;
  • ? 標(biāo)準(zhǔn)化幫助:自動生成-h/--help幫助信息,格式統(tǒng)一;
  • ? 容錯性強:參數(shù)類型錯誤、缺失時,自動輸出錯誤提示;
  • ? 稍重:需先定義參數(shù)再解析,簡單場景下略有冗余;
  • ? 非極簡:極簡單的參數(shù)場景下,代碼量略高于 sys.argv。

四、深度對比:sys.argv vs argparse

4.1 核心維度對比表

對比維度sys.argvargparse
原生性內(nèi)置 sys 模塊,無需額外依賴3.2 + 標(biāo)準(zhǔn)庫,無需額外安裝
參數(shù)解析難度手動遍歷 / 判斷 / 切片,難度高自動解析,僅需定義參數(shù),難度低
類型校驗無,需手動轉(zhuǎn)換(如 int/str)支持 int/float 等類型自動校驗
默認(rèn)值支持需手動判斷參數(shù)是否存在,再賦值內(nèi)置 default 參數(shù),一鍵設(shè)置
幫助信息生成需手動編寫、打印幫助文本自動生成標(biāo)準(zhǔn)化 - h/--help 幫助信息
異常容錯無,參數(shù)錯誤直接拋異常 / 邏輯錯誤內(nèi)置異常處理,自動輸出錯誤提示
代碼量(簡單場景)少(幾行即可處理)多(需定義解析器、參數(shù)、解析步驟)
代碼量(復(fù)雜場景)極多(需大量 if/else 處理參數(shù))少(模塊化定義參數(shù),邏輯清晰)
適用參數(shù)數(shù)量適合 1-3 個簡單參數(shù)適合任意數(shù)量,尤其多參數(shù)場景
學(xué)習(xí)成本低(僅需了解列表取值)中(需學(xué)習(xí)參數(shù)定義、action 等屬性)

4.2流程圖

sys.argv 解析流程(手動處理)

argparse 解析流程(自動處理)

4.3 性能對比(實測數(shù)據(jù))

為驗證兩者的執(zhí)行效率,我們對 “解析 1 個參數(shù)并輸出結(jié)果” 的場景做 1000 次循環(huán)測試(Python 3.9.7,Windows 11):

方案1000 次執(zhí)行總耗時(ms)單次平均耗時(ms)
sys.argv12.30.0123
argparse18.70.0187

結(jié)論:sys.argv 因無額外封裝,執(zhí)行效率略高;argparse 因封裝了解析邏輯,耗時稍高,但差距在毫秒級,業(yè)務(wù)場景可忽略。

五、適用場景選擇

優(yōu)先用 sys.argv 的場景:

  1. 極簡單的參數(shù)處理(如僅 1-2 個參數(shù),無類型校驗);
  2. 快速編寫的臨時腳本(追求極簡代碼,無需標(biāo)準(zhǔn)化);
  3. 嵌入式 / 輕量化運行環(huán)境(需最小化依賴和代碼量)。

優(yōu)先用 argparse 的場景:

  1. 生產(chǎn)級命令行工具(需標(biāo)準(zhǔn)化、可維護性);
  2. 多參數(shù)、復(fù)雜參數(shù)邏輯(如類型校驗、默認(rèn)值、子命令);
  3. 團隊協(xié)作開發(fā)(需統(tǒng)一的參數(shù)解析規(guī)范和幫助信息);
  4. 需容錯性和用戶友好性(自動錯誤提示、標(biāo)準(zhǔn)化幫助)。

六、總結(jié)

sys.argv 和 argparse 并非 “誰替代誰”,而是 “按需選擇”:

  • sys.argv是 Python 命令行參數(shù)處理的 “極簡方案”,原生、輕量、高效,適合小腳本、臨時需求;
  • argparse是 “工業(yè)級方案”,功能全面、易維護、用戶友好,適合生產(chǎn)環(huán)境、復(fù)雜參數(shù)場景。

實際開發(fā)中,建議根據(jù)參數(shù)復(fù)雜度選擇:簡單場景用 sys.argv 快速實現(xiàn),復(fù)雜場景用 argparse 提升代碼質(zhì)量和用戶體驗。

附:擴展建議

  1. 如需要更輕量的第三方庫,可考慮click(基于 argparse 封裝,語法更簡潔);
  2. 如需兼容 Python 2/3,需注意 argparse 的版本兼容(Python 2 需手動pip install argparse);
  3. 生產(chǎn)環(huán)境中,即使使用 sys.argv,也建議增加參數(shù)校驗和異常處理,提升魯棒性。

以上就是Python使用sys.argv與argparse進(jìn)行命令行參數(shù)處理的詳細(xì)內(nèi)容,更多關(guān)于Python命令行參數(shù)處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python控制臺英漢漢英電子詞典

    python控制臺英漢漢英電子詞典

    這篇文章主要為大家詳細(xì)介紹了python控制臺英漢漢英電子詞典,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2014-06-06
  • Python基于進(jìn)程池實現(xiàn)多進(jìn)程過程解析

    Python基于進(jìn)程池實現(xiàn)多進(jìn)程過程解析

    這篇文章主要介紹了Python基于進(jìn)程池實現(xiàn)多進(jìn)程過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Python PyQt5模塊實現(xiàn)一個瀏覽器的示例代碼

    Python PyQt5模塊實現(xiàn)一個瀏覽器的示例代碼

    在項目開發(fā)中,有的應(yīng)用程序可以運行在web瀏覽器,本文主要介紹了Python PyQt5模塊實現(xiàn)一個瀏覽器的示例代碼,分享給大家,感興趣的可以了解一下
    2021-07-07
  • python中whl文件封裝的實現(xiàn)示例

    python中whl文件封裝的實現(xiàn)示例

    Wheel(.whl)是 Python 的一種內(nèi)置包格式,本文就來介紹一下python中whl文件封裝的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Python xlrd讀取excel日期類型的2種方法

    Python xlrd讀取excel日期類型的2種方法

    這篇文章主要介紹了Python xlrd讀取excel日期類型的2種方法,本文同時講解了xlrd讀取excel某個單元格的方法,需要的朋友可以參考下
    2015-04-04
  • python中路徑字符串斜杠替換方式

    python中路徑字符串斜杠替換方式

    這篇文章主要介紹了python中路徑字符串斜杠替換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python驗證碼識別的示例代碼

    python驗證碼識別的示例代碼

    本篇文章主要介紹了python驗證碼識別的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Python內(nèi)置函數(shù)Type()函數(shù)一個有趣的用法

    Python內(nèi)置函數(shù)Type()函數(shù)一個有趣的用法

    這篇文章主要介紹了Python內(nèi)置函數(shù)Type()函數(shù)一個有趣的用法,本文講解的是個人發(fā)現(xiàn)在的一個有趣的用法,注意這種寫法會導(dǎo)致代碼很難讀,需要的朋友可以參考下
    2015-02-02
  • Python接口自動化之cookie、session應(yīng)用詳解

    Python接口自動化之cookie、session應(yīng)用詳解

    本文主要介紹cookie、session原理及在自動化過程中如何利用cookie、session保持會話狀態(tài)的應(yīng)用,有需要的朋友可以參考下,希望可以有所幫助
    2021-08-08
  • 一篇文章帶你了解幾個好用的Python技巧

    一篇文章帶你了解幾個好用的Python技巧

    這篇文章主要介紹了幾個Python小技巧,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10

最新評論

阜南县| 宣恩县| 剑川县| 筠连县| 青田县| 江西省| 长治县| 五华县| 雷波县| 准格尔旗| 津市市| 五指山市| 镇沅| 宝清县| 慈利县| 巢湖市| 宁城县| 温州市| 太湖县| 邯郸市| 柞水县| 绥江县| 公安县| 扬州市| 香港 | 连山| 盘锦市| 砀山县| 宣武区| 湄潭县| 西畴县| 郓城县| 徐水县| 西林县| 芜湖县| 双柏县| 阿瓦提县| 鲁山县| 盐边县| 襄樊市| 海林市|