python37——argparse模塊入門
以下內容來源於對python文檔的學習
基礎
下列函數不作任何事情
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
#如下是運行結果
$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h]
optional arguments:
-h, --help show this help message and exit
$ python3 prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python3 prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo
從上述輸出可以看到,該腳本未加任何選項,則無任何標準輸出。
-h 或–help可得到很不錯的幫助信息
必選參數和可選參數
1.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('square',help='display a square of a given number',type=int)#默認從cmd獲取的參數被視作str,故此處指定輸入爲int
parser.add_argument('--opswitch',help='this is an optional switch')
args=parser.parse_args()
print(args.square**2)
if args.opswitch:
print('switch turned on')
#add_argument參數衆多,此處,第一項——屬性名;第二項——幫助;第三項——指定stdin類型
由上述可知,腳本包含一個必選參數和一個可選參數;
- 可選參數與必選參數區別:即使不指定可選參數,也不會報錯
注意:此處要注意情況1和情況2的區別——若使用了—opswitch,則必須指定參數!
2.修改代碼如下
由於對於我們程序的功能,僅有兩個值是可用的——True和False,故修改如下
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--opswitch',help='this is an optional switch',
action="store_true")# 也可輸入store_false
args = parser.parse_args()
if args.opswitch:
print("switch turned on")
- 幫助(-h --help)
注意此處可選參數與之前help文本之間的差別
- 輸出
注意到對於可選參數,我們新增了一個關鍵詞——action,並賦值’store_true’。若如上圖指定了可選參數,則會將True賦值於args.opswitch。否則爲False
並且,當你指定opswitch的值時,會報錯。這纔是真正意義上的flag。
短選項
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-op','--opswitch',help='this is an optional switch',
action="store_true")
args = parser.parse_args()
if args.opswitch:
print("switch turned on")
- 輸出
可選參數與必選參數配合使用
- 限制可選參數可接收的值,代碼如下
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('square',help='display a square of a given number',type=int)
parser.add_argument('-op','--opswitch',help='this is an optional switch',type=int,choices=[0,1,2])#添加了choices選項限制
args=parser.parse_args()
sq=args.square**2
if args.opswitch == 2:
print("the square of {} equals {}".format(args.square, sq))
elif args.opswitch == 1:
print("{}^2 == {}".format(args.square, sq))
else:
print(sq)
輸出如下:
從結果看,choices
選項修改對於結果和HELP信息都會產生影響。
add_argument()
其他選項介紹action=‘count’
:計算指定可選參數出現的次數default=value
:指定可選參數的默認值爲value,若無,則默認爲None
進階使用
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
parser.add_argument("-v", "--verbosity", action="count", default=0)
args = parser.parse_args()
answer = args.x**args.y
if args.verbosity >= 2:
print("Running '{}'".format(__file__))
if args.verbosity >= 1:
print("{}^{} == ".format(args.x, args.y), end="")
print(answer)
- 輸出
$ python3 prog.py 4 2
16
$ python3 prog.py 4 2 -v
4^2 == 16
$ python3 prog.py 4 2 -vv
Running 'prog.py'
4^2 == 16
衝突選項——argparse.ArgumentParser
作用:允許指定相反的選項。修改代碼如下——增加opswitch的相反項
import argparse
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
#程序描述
group=parser.add_mutually_exclusive_group()
group.add_argument('-o','--opswitch',help='this is an optional switch',action='store_true')
group.add_argument('-r','--ropswitch',help='this is the reverse switch',action='store_true')
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args=parser.parse_args()
sq=args.x**args.y
if args.opswitch:
print("{} to the power {} equals {}".format(args.x, args.y, sq))
elif args.ropswitch:
print("{}^{} == {}".format(args.x, args.y, sq))
else:
print(sq)
- 輸出
若同時指定ro選項,則會報出如上錯誤