您好,登錄后才能下訂單哦!
本篇內容主要講解“python中argparse模塊怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python中argparse模塊怎么使用”吧!
argsparse是python的命令行解析的標準模塊,內置于python,不需要安裝。這個庫可以讓我們直接在命令行中就可以向程序中傳入參數并讓程序運行。
在這里我們利用git
來演示命令行運行
git -h git -version git show
1.導包: import argparse 2.創建對象: parser = argparse.ArgumentParser() 3.添加參數: parser.add_argument() 4.解析參數: parser.parse_args()
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”則會去掉第一次出現的命令參數重復的部分或者全部(可能是短命令沖突或者全都沖突)
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 # 短選項可以寫一起
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模塊怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。