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

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

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

一、引言

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

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

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

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

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

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

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

import os
import sys

# 遍歷命令行參數(shù)(從索引1開始,跳過腳本名)
for i in range(1, len(sys.argv)):
    if sys.argv[i] == "-h":
        # 手動(dòng)編寫幫助信息
        print('''本代碼幫助
        -h:用于查詢幫助
        -a:用于獲取python所有關(guān)鍵字
        -c:用于獲取python安裝的所有第三方庫(kù)
        -x:代表安裝第三方庫(kù),加入鏡像地址
        -v:查詢python的所有內(nèi)置函數(shù)''')
    if sys.argv[i] == '-a':
        print('開始查詢Python的所有關(guān)鍵字:')
        help("keywords")
    if sys.argv[i] == '-c':
        print('開始查詢Python安裝的所有第三方庫(kù): ')
        os.system('pip list')
    if sys.argv[i] == '-x':
        # 手動(dòng)獲取后續(xù)參數(shù)(安裝的庫(kù)名)
        library_name = sys.argv[i + 1]
        print(f'開始安裝第三方庫(kù):{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 -hsys.argv的取值為['p_work.py', '-h'],程序遍歷到-h后手動(dòng)打印幫助信息;執(zhí)行python p_work.py -x requests,sys.argv['p_work.py', '-x', 'requests'],程序手動(dòng)取i+1位置的requests作為庫(kù)名執(zhí)行安裝。

2.3 sys.argv 核心特點(diǎn)

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

三、功能強(qiáng)大:argparse 詳解

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

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

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

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

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

import argparse

# 1. 創(chuàng)建參數(shù)解析器對(duì)象
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)入手動(dòng)輸入求和邏輯;執(zhí)行python args.py --aaa 10 --bbb 20,程序自動(dòng)解析數(shù)值類型參數(shù),輸出30;執(zhí)行python args.py -h,自動(dòng)生成標(biāo)準(zhǔn)化幫助信息:

3.3 argparse 核心特點(diǎn)

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

四、深度對(duì)比:sys.argv vs argparse

4.1 核心維度對(duì)比表

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

4.2流程圖

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

argparse 解析流程(自動(dòng)處理)

4.3 性能對(duì)比(實(shí)測(cè)數(shù)據(jù))

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

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

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

五、適用場(chǎng)景選擇

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

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

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

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

六、總結(jié)

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

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

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

附:擴(kuò)展建議

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

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

相關(guān)文章

  • python控制臺(tái)英漢漢英電子詞典

    python控制臺(tái)英漢漢英電子詞典

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

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

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

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

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

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

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

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

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

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

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

    python驗(yàn)證碼識(shí)別的示例代碼

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

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

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

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

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

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

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

最新評(píng)論

麦盖提县| 绵阳市| 虎林市| 清苑县| 绥阳县| 石渠县| 新蔡县| 章丘市| 云霄县| 长治市| 福贡县| 五家渠市| 江津市| 新泰市| 论坛| 彰化市| 茶陵县| 岫岩| 濉溪县| 鸡西市| 绥宁县| 刚察县| 当涂县| 新野县| 丰都县| 南川市| 庄浪县| 卢湾区| 阜阳市| 广灵县| 英超| 嵩明县| 自治县| 东兰县| 顺昌县| 合作市| 宁南县| 星子县| 冕宁县| 宁波市| 曲靖市|