程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python中argparse模快

編輯:Python

文章目錄

  • argparse模塊用法
    • 一、 概念
    • 二、 基礎
      • 1、 使用步驟
        • 1.1 總步驟
        • 1.2 創建對象
        • 1.3 添加參數
        • 1.4 解析參數
    • 三、 使用案例

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)

參數說明:

  • prog:程序的名字,默認為sys.argv[0],用來在help信息中描述程序的名稱
  • usag:描述程序用途的字符串
  • description:help信息前的文字
  • epilog:help信息之後的信息
  • add_help:是否添加幫助信息
  • prefix_chars:參數前綴,默認為-
  • fromfile_prefix_chars:前綴字符,放在文件名之前
  • argument_default:參數的全局默認值
  • 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種動作可以在解析到一個參數時進行觸發

    1. store:保存參數值,可能會先將參數值轉換成另一個數據類型。默認動作為這個

    2. store_const:保存一個被定義為參數規格一部分的值,而不是一個來自參數解析而來的值。這通常用於實現非布爾值的命令行標記

    3. stroe_true/store_false:保存相應的布爾值,這兩個動作被用於實現布爾開關

    4. append:將值保存到一個列表中。若參數重復出現,則保存多個值

    5. append_const:將一個定義在參數規格中的值保存到一個列表中

    6. 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__ = "[email protected]"
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__ = "[email protected]"
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)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved