首頁 > 軟體

python中argparse模組基礎及使用步驟

2022-06-18 18:02:08

argparse模組用法

一、 概念

argsparse是python的命令列解析的標準模組,內建於python,不需要安裝。這個庫可以讓我們直接在命令列中就可以向程式中傳入引數並讓程式執行。

官方檔案的位置:【https://docs.python.org/zh-cn/3/library/argparse.html

在這裡我們利用git來演示命令列執行

git -h
git -version 
git show

二、 基礎

1、 使用步驟

1.1 總步驟

1.導包:
import argparse
2.建立物件:
parser = argparse.ArgumentParser()
3.新增引數:
parser.add_argument()
4.解析引數:
parser.parse_args()

1.2 建立物件

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)

引數說明:

  1. prog:程式的名字,預設為sys.argv[0],用來在help資訊中描述程式的名稱
  2. usag:描述程式用途的字串
  3. description:help資訊前的文字
  4. epilog:help資訊之後的資訊
  5. add_help:是否新增幫助資訊
  6. prefix_chars:引數字首,預設為-
  7. fromfile_prefix_chars:字首字元,放在檔名之前
  8. argument_default:引數的全域性預設值
  9. conflict_hander:對衝突的處理方式,預設為返回錯誤“error”。還有“resolve”,智慧解決衝突。當用戶給程式新增了兩個一樣的命令引數時,“error”就直接報錯,提醒使用者。而“resolve”則會去掉第一次出現的命令引數重複的部分或者全部(可能是短命令衝突或者全都衝突)

1.3 新增引數

add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

引數說明:

  • name or flags:引數有兩種,可選引數和位置引數。parse_args()執行時,會用-來認證可選引數,剩下的即為位置引數。位置引數必選,可選引數可選
# 可選引數
parser.add_argument("-f", "--foo")
# 位置引數
parser.add_argument("bar")  # 位置引數在執行時一定要輸入
  • action:動作,argparse內建6種動作可以在解析到一個引數時進行觸發
  • store:儲存引數值,可能會先將引數值轉換成另一個資料型別。預設動作為這個
  • store_const:儲存一個被定義為引數規格一部分的值,而不是一個來自引數解析而來的值。這通常用於實現非布林值的命令列標記
  • stroe_true/store_false:儲存相應的布林值,這兩個動作被用於實現布林開關
  • append:將值儲存到一個列表中。若引數重複出現,則儲存多個值
  • append_const:將一個定義在引數規格中的值儲存到一個列表中
  • version:列印關於程式的版本資訊,然後退出
parse.add_argument('--version',action = 'version',version = '%(prog)s2.0')
  • nargs:引數的數量
  • 值可以為整數,*(任意多個),+(一個或更多)
  • 首先從命令列獲取引數,若沒有則從const獲得,然後從default獲得
  • dest:引數值就儲存為parse_args()返回的名稱空間物件中為該dest引數值的一個屬性。如果提供dest="a",那麼可以通過args.a存取該引數
  • default:設定引數的預設值
  • type:把從命令列輸入的結果轉成設定的型別
  • choice:允許的引數值
  • requires:是否必選
  • desk:可作為引數名
  • help:引數命令的介紹

引數的幾種寫法:

python py.py -i 1  # 使用空格分開
python py.py --integer=1  # 長選項使用等號分開
python py.py -i1  # 短選項可以寫一起

1.4 解析引數

args = parser.parse_args()  # 括號裡面可以傳入命令列的引數
args_ = parser.parse_args("-i=1".split("="))

三、 使用案例

我們可以建立一個模板:

#!/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):  # 判斷是否要使用命令列引數
    def get_params(fun: Callable):
        if param:
            parser = argparse.ArgumentParser(description="help document")
            "---------------------------------------------------------------"
			# 如果需要從命令列傳入引數時,就在這裡新增
            "---------------------------------------------------------------"
            args = parser.parse_args()
        else:
            args = None
        @wraps(fun)
        def inner():
            ret = fun(args)  # 可能在傳引數是還要進行其他的初始化操作
            return ret
        return inner
    return get_params
@terminal()  # 使用裝飾器
def main(args): 
    print(args)
if __name__ == "__main__":
    main()
    sys.exit(0)

使用案例,建立一個程式,可以連線郵箱的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模組的文章就介紹到這了,更多相關python argparse模組內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com