python之定義參數模塊argparse(一)基本使用


在shell腳本中,若腳本帶參數,則在腳本中使用$1、$2...等引用,

在python中,也可以定義類似的引用參數,可以為必選項也可以可選項。

 

基本用法如下三種:

1、必選項(位置參數)

import argparse

p = argparse.ArgumentParser()
p.add_argument('var',help='Required parameters')
args = p.parse_args()
if args.var:
    print(args.var)

若把此代碼保存為arg.py,則執行的時候必須帶一個參數,否則報錯:

python arg.py hello,world

 

可以使用如下命令查看:

D:\MyTestProject\MyLearn>python ArgParseLearn.py -h
usage: ArgParseLearn.py [-h] var

positional arguments:
  var         Required parameters

optional arguments:
  -h, --help  show this help message and exit

 

也可以把可選項設置為必選項,在add_argument中設置required為True就可以了,如下設置:

p.add_argument('-p',help='Optional parameters',required = True)

 

 

2、可選項一

import argparse

p = argparse.ArgumentParser()
p.add_argument('-p',help='Optional parameters')
args = p.parse_args()
if args.p:
    print(args.p)
else:
    print('no var')

 

若把此代碼保存為arg.py,則執行的時候可帶參數也可不帶:

python arg.py

python arg.py hello,world

 

3、可選項二

import argparse

p = argparse.ArgumentParser()
p.add_argument('--parameter',help='Optional parameters')
args = p.parse_args()
if args.parameter:
    print(args.parameter)
else:
    print('no parameter')

若把此代碼保存為arg.py,則執行的時候可帶參數也可不帶:

python arg.py

python arg.py hello,world

 

以上為3種入參方法,其實add_argument有很多參數可供選擇:

name - 選項字符串的名字或者列表,例如var、-p等,可以使用-h查看到。

一般來說,單字母用-,多字母使用--,如果-p,-v,--version,--pass等,如果不使用-或者--,默認這個參數必須填寫,類似加了required = True

action - 基本動作類型,當前默認有如下一些類型:

store  --這是默認類型,即存儲值

store_const  ---保存const參數的值,此時執行文件只帶參數,不帶變量,如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('-p',help='Optional parameters',action = 'store_const',const = '78')
args = p.parse_args()
print(args.p)

如上代碼保存為arg.py,應該這么執行:python arg.py -p

此時打印出來的值為const的值78

store_true和store_false  ---對應布爾值,True和False

append   ---此選項把參數對應的值使用list集合起來,如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('-p',help='Optional parameters',action = 'append')
args = p.parse_args()
print(args.p)

保存為arg.py,則可以如下執行:python arg.py -p 1 -p 2 -p 89

執行結果為['1', '2', '89']

append_const  ---這個必須有參數const,把const集合起來

count  ----查看參數出現幾次

help  ---默認會自動存在的

version  ---必須配合version參數,用法如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('-v',help='Optional parameters',action = 'version',version = '1.15.1')
args = p.parse_args()
print(args.p)

保存為arg.py,執行python arg.py -v則顯示version參數的值

 

nargs - 對應參數應該獲取的變量個數,大於1個變量用list來表示。一般取值有如下幾個:

N  數值int型,即nargs=3,nargs=10等

?  表示0個或者1個參數,如nargs = '?'

*  表示0個或者多個參數,如nargs = '*'
+  表示1個或者多個參數,如nargs = '+'

const - 某些action和nargs選項要求的常數值。如果有這個參數,則使用腳本時不需要追加變量

default - 如果命令行中沒有出現該參數時該參數的默認值。

type - 命令行參數應該被轉換成的類型。支持以下類型:

str,int,float,complex,file。如果沒有此參數,默認為str類型

choices - 參數可允許的值的一個容器(列表)。

required - 該命令行選項是否可以省略(只針對可選參數)。

help - 參數的簡短描述。

metavar - 參數在幫助信息中的名字,即類似起一個別名。如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument(
'p',help='Optional parameters',metavar = 'TP')
p.add_argument('--gogo',help='Optional parameters',nargs = 2,metavar = ('new','old'))
args = p.parse_args() print(args.p)

保存為arg.py后執行python arg.py -h,可以看到名稱不是p,而是TP:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -h
usage: temp.py [-h] TP

positional arguments:
  TP          Optional parameters

optional arguments:
  -h, --help  show this help message and exit
 --gogo new old  Optional parameters

 

dest - 給parse_args()返回的對象要添加的屬性名稱。即給namespace里面的參數起個別名,作用同metavar(只有非位置參數才可以用dest),如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('-p',help='Optional parameters',metavar = 'TP',dest = 'paaa')
args = p.parse_args()
print(args)

保存為arg.py,然后執行python arg.py -h查看如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -h
usage: temp.py [-h] [-p TP]

optional arguments:
  -h, --help  show this help message and exit
  -p TP       Optional parameters

執行python arg.py -p yy,結果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python temp.py -p 5
Namespace(paaa='5')

 

 

對於ArgumentParser類中也有許多參數,查看__ini__如下:

    def __init__(self,
                 prog=None,
                 usage=None,
                 description=None,
                 epilog=None,
                 parents=[],
                 formatter_class=HelpFormatter,
                 prefix_chars='-',
                 fromfile_prefix_chars=None,
                 argument_default=None,
                 conflict_handler='error',
                 add_help=True,
                 allow_abbrev=True):

prog ---程序名稱,默認為sys.argv[0]

usage ---程序使用方法介紹,放在幫助的最前面

description ---描述信息,在usage之后,參數之前

epilog ---幫助信息中參數之后的文本信息

parents ---ArgumentParser 對象的一個列表,如果在列表中,會把parents包含的對象的所有參數帶過來,如下示例:

import argparse

#父參數
p_parser = argparse.ArgumentParser(add_help=False)
p_parser.add_argument('-f')
#子參數並使用父參數
son = argparse.ArgumentParser(parents = [p_parser])
son.add_argument('-p')
sonargs = son.parse_args()
print(sonargs)

把上述代碼保存為arg.py,執行python arg.py -p aa -f body,結果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -p aa -f body
Namespace(f='body', p='aa')

可以看到父參數也可以在這里接收到對應的值

這里要注意的是,若作為父參數,必須要設置add_help = False

 

formatter_class = HelpFormatter ---格式化的幫助信息,可以自定義

prefix_chars = '-'  ----可選參數的前綴,默認是'-'

fromfile_prefix_chars = None  ---讀取額外文件的字符集前綴,如下所示:

import argparse

p = argparse.ArgumentParser(fromfile_prefix_chars = '@')
p.add_argument('-f')
args = p.parse_args()
print(args)
print(args.f)

保存為arg.py,在arg.py同目錄下創建一個文件a.txt並輸入一行:-f mylife

然后在命令行中執行python arg.py @a.txt,接入如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py @a.txt
Namespace(f=' mylife')
 mylife

 

argument_default = None ---參數的默認值,默認None

conflict_handler  ---解決參數沖突,如下可以使用新參數頂替就參數:

import argparse

p = argparse.ArgumentParser(conflict_handler = 'resolve')
p.add_argument('-f','--fule',help = 'old')
p.add_argument('--fule',help = 'new')
print(p.parse_args())

保存如上代碼為arg.py,執行python arg.py -h,結果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -h
usage: temp.py [-h] [-f FULE] [--fule FULE]

optional arguments:
  -h, --help   show this help message and exit
  -f FULE      old
  --fule FULE  new

再執行python arg.py,結果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py
Namespace(fule=None)

發現只有一個參數fule,當我們帶參數執行時,若帶-f則fule參數也可以取得值,若帶-f和--fule,此時fule參數值為--fule的參數值。

 

add_help = True  ---默認增加-h/--help給解釋器,若為False則不會自動添加-h/--help選項

allow_abbrev = True ---允許參數簡寫,默認是允許的,如下:

import argparse

p = argparse.ArgumentParser(allow_abbrev = True)
p.add_argument('--fule',help = 'fule')
p.add_argument('--file',help = 'file')
args = p.parse_args()
print(args)

保存為arg.py,在命令行中執行python arg.py --fu c,執行結果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py --fu c
Namespace(file=None, fule='c')

可以看到fule參數獲取到了值,如果allow_abbrev = False,則會報錯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM