【PYTHON3學習】——argparse模塊入門

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) 
  • 輸出
    1581926719553
    1581926680021

1581926693275

若同時指定ro選項,則會報出如上錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章