溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中argparse模塊怎么使用

發(fā)布時間:2022-06-18 13:35:59 來源:億速云 閱讀:177 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“python中argparse模塊怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python中argparse模塊怎么使用”吧!

    argparse模塊用法

    一、 概念

    argsparse是python的命令行解析的標準模塊,內(nèi)置于python,不需要安裝。這個庫可以讓我們直接在命令行中就可以向程序中傳入?yún)?shù)并讓程序運行。

    在這里我們利用git來演示命令行運行

    git -h
    git -version 
    git show

    二、 基礎

    1、 使用步驟

    1.1 總步驟
    1.導包:
    import argparse
    2.創(chuàng)建對象:
    parser = argparse.ArgumentParser()
    3.添加參數(shù):
    parser.add_argument()
    4.解析參數(shù):
    parser.parse_args()
    1.2 創(chuàng)建對象
    parser = ArgumentParser(prog=None, usage=None,description=None, epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-',fromfile_prefix_chars=None, argument_default=None,conflict_handler='error', add_help=True)

    參數(shù)說明:

    1. prog:程序的名字,默認為sys.argv[0],用來在help信息中描述程序的名稱

    2. usag:描述程序用途的字符串

    3. description:help信息前的文字

    4. epilog:help信息之后的信息

    5. add_help:是否添加幫助信息

    6. prefix_chars:參數(shù)前綴,默認為-

    7. fromfile_prefix_chars:前綴字符,放在文件名之前

    8. argument_default:參數(shù)的全局默認值

    9. conflict_hander:對沖突的處理方式,默認為返回錯誤“error”。還有“resolve”,智能解決沖突。當用戶給程序添加了兩個一樣的命令參數(shù)時,“error”就直接報錯,提醒用戶。而“resolve”則會去掉第一次出現(xiàn)的命令參數(shù)重復的部分或者全部(可能是短命令沖突或者全都沖突)

    1.3 添加參數(shù)
    add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

    參數(shù)說明:

    • name or flags:參數(shù)有兩種,可選參數(shù)和位置參數(shù)。parse_args()運行時,會用-來認證可選參數(shù),剩下的即為位置參數(shù)。位置參數(shù)必選,可選參數(shù)可選

    # 可選參數(shù)
    parser.add_argument("-f", "--foo")
    # 位置參數(shù)
    parser.add_argument("bar")  # 位置參數(shù)在運行時一定要輸入
    • action:動作,argparse內(nèi)置6種動作可以在解析到一個參數(shù)時進行觸發(fā)

    • store:保存參數(shù)值,可能會先將參數(shù)值轉(zhuǎn)換成另一個數(shù)據(jù)類型。默認動作為這個

    • store_const:保存一個被定義為參數(shù)規(guī)格一部分的值,而不是一個來自參數(shù)解析而來的值。這通常用于實現(xiàn)非布爾值的命令行標記

    • stroe_true/store_false:保存相應的布爾值,這兩個動作被用于實現(xiàn)布爾開關(guān)

    • append:將值保存到一個列表中。若參數(shù)重復出現(xiàn),則保存多個值

    • append_const:將一個定義在參數(shù)規(guī)格中的值保存到一個列表中

    • version:打印關(guān)于程序的版本信息,然后退出

    parse.add_argument('--version',action = 'version',version = '%(prog)s2.0')
    • nargs:參數(shù)的數(shù)量

    • 值可以為整數(shù),*(任意多個),+(一個或更多)

    • 首先從命令行獲取參數(shù),若沒有則從const獲得,然后從default獲得

    • dest:參數(shù)值就保存為parse_args()返回的命名空間對象中為該dest參數(shù)值的一個屬性。如果提供dest="a",那么可以通過args.a訪問該參數(shù)

    • default:設置參數(shù)的默認值

    • type:把從命令行輸入的結(jié)果轉(zhuǎn)成設置的類型

    • choice:允許的參數(shù)值

    • requires:是否必選

    • desk:可作為參數(shù)名

    • help:參數(shù)命令的介紹

    參數(shù)的幾種寫法:

    python py.py -i 1  # 使用空格分開
    python py.py --integer=1  # 長選項使用等號分開
    python py.py -i1  # 短選項可以寫一起
    1.4 解析參數(shù)
    args = parser.parse_args()  # 括號里面可以傳入命令行的參數(shù)
    args_ = parser.parse_args("-i=1".split("="))

    三、 使用案例

    我們可以創(chuàng)建一個模板:

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo01.py"
    __time__ = "2022/6/16 17:12"
    __email__ = "liu.zhong.kun@foxmail.com"
    from typing import Callable
    from functools import wraps
    import sys, argparse
    def terminal(param: bool = False):  # 判斷是否要使用命令行參數(shù)
        def get_params(fun: Callable):
            if param:
                parser = argparse.ArgumentParser(description="help document")
                "---------------------------------------------------------------"
    			# 如果需要從命令行傳入?yún)?shù)時,就在這里添加
                "---------------------------------------------------------------"
                args = parser.parse_args()
            else:
                args = None
            @wraps(fun)
            def inner():
                ret = fun(args)  # 可能在傳參數(shù)是還要進行其他的初始化操作
                return ret
            return inner
        return get_params
    @terminal()  # 使用裝飾器
    def main(args): 
        print(args)
    if __name__ == "__main__":
        main()
        sys.exit(0)

    使用案例,創(chuàng)建一個程序,可以連接郵箱的SMTP服務

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo01.py"
    __time__ = "2022/6/16 17:12"
    __email__ = "liu.zhong.kun@foxmail.com"
    from smtplib import SMTP
    from typing import Callable
    from functools import wraps
    import sys, argparse
    def terminal(param: bool = False):
        def get_params(fun: Callable):
            if param:
                parser = argparse.ArgumentParser(description="help document")
                "---------------------------------------------------------------"
                parser.add_argument('--version', "-v", action='version', version='%(prog)s 2.0')
                parser.add_argument("-u", "--username", type=str, help="Enter the SMTP server account", required=True)
                parser.add_argument("-p", "--password", type=str, help="Enter the SMTP server password", required=True)
                "---------------------------------------------------------------"
                args = parser.parse_args()
            else:
                args = None
            @wraps(fun)
            def inner():
                ret = fun(args)
                return ret
            return inner
        return get_params
    @terminal(True)
    def main(args):
        smtp = SMTP('smtp.qq.com')
        smtp.login(args.username, args.password)
        smtp.quit()
        smtp.close()
    if __name__ == "__main__":
        main()
        sys.exit(0)

    到此,相信大家對“python中argparse模塊怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI