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

[python] argparse模塊

編輯:Python

經過配置,腳本可以接受命令行選項及參數。argparse是為解析各類參數提供支持的模塊,還可以生成用法幫助信息。

創建一個ArgumentParser的實例,填入一定的參數,然後可以把可選參數(optional argument)和位置參數(positional argument)都讀取出來。

使用步驟
(1)import argparse 首先導入模塊
(2)parser = argparse.ArgumentParser() 創建一個解析對象
(3)parser.add_argument() 向該對象中添加你要關注的命令行參數和選項
(4)parser.parse_args() 進行解析

argparse.ArgumentParser()方法參數
description - 命令行幫助的開始文字,大部分情況下,我們只會用到這個參數
epilog - 命令行幫助的結尾文字
……

add_argument()方法參數
name or flags - 指定參數的形式,一般寫兩個,短參數和長參數,看下面的例子"-f", "–file"
可選的選項,位置不固定,默認是可選的 
位置固定的選項,默認是必須有的
nargs - 指定這個參數後面的value有多少個,例如,我們希望使用-n 1 2 3 4,來設置n的值為[1, 2, 3, 4] #parser.add_argument("-n", "–num", nargs="+", type=int) # 這裡nargs="+"表示,如果你指定了-n選項,那麼-n後面至少要跟一個參數,"+"表示至少一個,"?"表示一個或0個,"*"表示0個或多個
default - 如果命令行沒有出現這個選項,那麼使用default指定的默認值 
type - 如果希望傳進來的參數是指定的類型(例如 float, int等可以從字符串轉化過來的類型),可以使用 #parser.add_argument("-x", type=int) 。
choices - 設置參數值的范圍,如果choices中的類型不是字符串,記得指定type #parser.add_argument("-y", choices=['a', 'b', 'd'])
required - 通常-f這樣的選項是可選的,但是如果required=True那麼就是必須的了 #parser.add_argument("-z", choices=['a', 'b', 'd'], required=True)
metavar - 參數的名字,在顯示 幫助信息時才用到. 
help - 設置這個選項的幫助信息
action - The basic type of action to be taken when this argument is encountered at the command line.
 

【例】opts.py內容如下,

from argparse import ArgumentParser
def main():
parser = ArgumentParser()
parser.add_argument("indent",type=int,help="indent for report")
parser.add_argument("input_file",help="read data from this file")
parser.add_argument("-f","--file",dest="filename",help="read report to this file",metavar="FILE")
parser.add_argument("-x","--xray",help="specify xray strength factor")
parser.add_argument("-q","--quiet",action="store_false",dest="verbose",default=True,
help="don't print status messages to stdout")
args = parser.parse_args()
print("arguments:",args)
main()

說明:

line4 創建一個ArgumentParser的實例
line5,6 添加兩個位置參數indent和input_file,參數indent必須是能被解析為int類型的
說明:位置參數是指那些沒有前綴字符(通常是"-")且必須給定的參數,是在全部可選參數(以前綴字符"-"開頭)都解析完畢後輸入的參數。

line7 添加一個可選的文件名參數,可以是"-f"或"--file"
line9 最後一個參數"-q"帶有默認值(這裡為True),當未給出本參數時將設為默認值。參數action = "store_false"則表示,如果給出了本參數,則會將False值存入目標變量中。
 

(1)打印幫助信息

[[email protected] ~]# python3 opts.py
usage: opts.py [-h] [-f FILE] [-x XRAY] [-q] indent input_file
opts.py: error: the following arguments are required: indent, input_file
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# python3 opts.py -h
usage: opts.py [-h] [-f FILE] [-x XRAY] [-q] indent input_file
positional arguments:
indent indent for report
input_file read data from this file
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE read report to this file
-x XRAY, --xray XRAY specify xray strength factor
-q, --quiet don't print status messages to stdout
[[email protected] ~]#

(2)模塊argparse將返回一個Namespace對象,其屬性就包含了上面這些參數

下例給出參數-q,verbose設置為False(對應action="store_false")

[[email protected] ~]# python3 opts.py -x 100 -q -f outfile 2 inputdata
arguments: Namespace(indent=2, input_file='inputdata', filename='outfile', xray='100', verbose=False)
[[email protected] ~]#

(3)下例未給出參數-q,verbose設置為True(對應default=True)

[[email protected] ~]# python3 opts.py -x 100 -f outfile 2 inputdata
arguments: Namespace(indent=2, input_file='inputdata', filename='outfile', xray='100', verbose=True)
[[email protected] ~]#

(4)如果某個選項沒有給出實參,則其值為None

例如不帶可選參數 -f,則 filename=None

[[email protected] ~]# python3 opts.py -x 100 2 inputdata
arguments: Namespace(indent=2, input_file='inputdata', filename=None, xray='100', verbose=True)
[[email protected] ~]#

(5)未給出位置參數會報錯

[[email protected] ~]# python3 opts.py -x 100 -f outfile 2
usage: opts.py [-h] [-f FILE] [-x XRAY] [-q] indent input_file
opts.py: error: the following arguments are required: input_file
[[email protected] ~]#

(6)可以用句點符號“.”獲取這些參數的值。在opts.py的main() 中添加如下行

 print("indent: ",args.indent)
print("input_file: ",args.input_file)
print("file: ",args.filename)
print("xray: ",args.xray)
print("quiet: ",args.verbose)

注意:xray沒有設置dest,使用xray即可;對於file和quiet已設置dest,需要使用目標變量名

[[email protected] ~]# python3 opts.py -x 100 -f outfile 2 inputdata
arguments: Namespace(indent=2, input_file='inputdata', filename='outfile', xray='100', verbose=True)
indent: 2
input_file: inputdata
file: outfile
xray: 100
quiet: True
[[email protected] ~]#


參考資料:

python3中argparse模塊詳解 https://blog.csdn.net/qq_36653505/article/details/83788460
《Python 快速入門(第3版)》11.1.4 argparse模塊


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