天天看點

argparse子產品入門介紹——基于python3.7

首先說明,本人是想要學習如何使用argparse子產品,打造指令行程式。

但是網絡上的各種教程寫的隻能說是慘不忍睹,反人類來形容。這樣的文章寫出來純粹浪費大家時間。

找了很久,找到了python官方推薦的入門教程,看下來非常好。但是沒有中文版。

本人嘗試根據該教程,将argparse的核心使用方法做一介紹。

注:代碼均命名為 1.py.

1. 指令行程式架構

代碼如下:

import argparse
parser = argparse.ArgumentParser(description="程式的主要功能是...")
parser.parse_args()
           

執行代碼:

python 1.py --help
           

執行結果:

usage: 1.py [-h]

程式的主要功能是...

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

--help選項就是将指令行參數說一個說明。

-h 是 --help的縮寫形式,二者效果相同。

如程式中展示的,可以通過description參數來對程式的主要功能做出說明。

2. 添加一個位置參數

代碼如下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print('參數echo的值是{}'.format(args.echo))
           

執行代碼:

python 1.py 'hello'
           

執行結果:

參數echo的值是hello
           

以上代碼就是添加一個參數,存儲在名字為'echo'的變量裡面。

注意,要擷取變量的值,需要先通過parse_args()方法擷取args對象。

是以指令行資訊都可以通過args對象取值獲得。

注意,由于這裡指定了位置參數,也就是說,如果執行程式時沒有攜帶參數,則會報錯。

執行代碼:

python 1.py 'hello'
           

執行結果:

usage: 1.py [-h] echo
1.py: error: the following arguments are required: echo
           

3. 為位置參數添加說明

代碼如下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="我是關于echo的說明")
args = parser.parse_args()
print('參數echo的值是{}'.format(args.echo))
           

執行-h選項:

python 1.py -h
           

執行結果:

positional arguments:
  echo        我是關于echo的說明

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

可以看見,-h的執行結果中,已經列印了代碼中為位置參數echo添加的說明。

4. 指定參數類型

代碼如下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int)
args = parser.parse_args()
print(args.square**2)
           

執行代碼:

python 1.py 123
           

執行結果:

15129
           

注意這裡的代碼指定了一個位置參數square,并且指定類型為int。

預設情況下,如果沒有指定類型,argparse會将參數作為字元串存儲。

也就是說,,如果沒有指定類型,args.square的值是字元串'123'。

此時,在執行 args.square**2 的操作時,會報錯。

5. 指定可選參數

先看代碼:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity")
args = parser.parse_args()
print('可選參數verbosity的值是{}'.format(args.verbosity))
           

執行代碼:

python 1.py --verbosity 123
           

執行結果:

可選參數verbosity的值是123
           

注意,在參數前加上字首--,即意味着這個參數是可選參數。

可選參數與位置參數有兩點不同:

第一,可選參數可以不指定,如果這樣執行代碼:

python 1.py
           

則執行結果為:

可選參數verbosity的值是None
           

注意此時的,verbosity的值是None。

第二點不同,可選參數使用時,需要先聲明該參數,再指定該參數的值。

正如上面代碼中使用的那樣。讀者可以自行體會。

6. 設定無需具體值參數

比如說我們想要設定一個參數,如果指定了該參數,就執行一個功能,

如果沒指定,則不執行。具體該參數的值是多少在所不問。

代碼如下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", action="store_true")
args = parser.parse_args()
print("參數verbose的值是{}".format(args.verbose))
           

執行代碼:

python 1.py --verbose
           

執行結果:

參數verbose的值是True
           

可以看到,在執行代碼時,指定了可選參數--verbose,但是沒有指定verbose的值。

此時verbose的值就預設為布爾值True。

實作這一目的的方法是将action參數的值指定為 "store_true"。

通過這個特點,就可以實作使用某一個特定功能這個目的。

7. 設定參數的簡短形式

上面我們可以注意到,-h 是 --help 和簡單形式,二者功能相同。

我們也可以為自己設定的參數指定簡短的形式。

代碼為:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v","--verbose", action="store_true")
args = parser.parse_args()
print("參數verbose的值是{}".format(args.verbose))
           

執行代碼:

python 1.py -v
           

執行結果:

參數verbose的值是True
           

說明,在可選參數前添加一個簡短的參數,與直接使用原參數效果相同。

8. 同時添加位置參數和可選參數

代碼如下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int)
parser.add_argument("-v", "--verbose", action="store_true")
args = parser.parse_args()

if args.verbose:
    print("the square of {} equals {}".format(args.square, args.square**2))
else:
    print(args.square**2)
           

執行方式1:

python 1.py 50
           

執行結果1:

2500
           

執行方式2:

python 1.py 50 -v
           

執行結果2:

the square of 50 equals 2500
           

通過多次使用add_argument方法,來添加多個指令行參數。

9. 為可選參數設定取值範圍

代碼為:

import argparse
parser = argparse.ArgumentParser()

parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2])
args = parser.parse_args()

print("可選參數verbosity的值為{}".format(args.verbosity))
           

多次不同方式執行代碼:

MacBook-Pro:Desktop yao$ python 1.py
可選參數verbosity的值為None
MacBook-Pro:Desktop yao$ python 1.py -v 1
可選參數verbosity的值為1
MacBook-Pro:Desktop yao$ python 1.py -v 2
可選參數verbosity的值為2
MacBook-Pro:Desktop yao$ python 1.py -v 3
usage: 1.py [-h] [-v {0,1,2}]
1.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
           

說明,通過設定choices屬性,來設定可選參數的取值範圍。

如果不在取值範圍内的話,會報錯。

10. 監控可選參數的執行次數

代碼如下:

import argparse
parser = argparse.ArgumentParser()

parser.add_argument("-v", "--verbosity", action="count")
args = parser.parse_args()

print("可選參數verbosity的值為{}".format(args.verbosity))
           

以不同方式多次執行:

MacBook-Pro:Desktop yao$ python 1.py -v
可選參數verbosity的值為1
MacBook-Pro:Desktop yao$ python 1.py -vv
可選參數verbosity的值為2
MacBook-Pro:Desktop yao$ python 1.py -vvv
可選參數verbosity的值為3
MacBook-Pro:Desktop yao$ python 1.py -vvvv
可選參數verbosity的值為4
MacBook-Pro:Desktop yao$ python 1.py -vvvvv
可選參數verbosity的值為5
MacBook-Pro:Desktop yao$ python 1.py
可選參數verbosity的值為None
           

說明,通過設定action屬性值為 'count' ,可以監控使用了多少次可選參數。

讀者可自行根據執行結果感受該參數的作用。

11. 設定參數的預設值

代碼為:

import argparse
parser = argparse.ArgumentParser()

parser.add_argument("-v", "--verbosity", default=0)
args = parser.parse_args()

print("可選參數verbosity的值為{}".format(args.verbosity))
           

不同方式多次執行:

MacBook-Pro:Desktop yao$ python 1.py
可選參數verbosity的值為0
MacBook-Pro:Desktop yao$ python 1.py -v 100
可選參數verbosity的值為100
           

注意此時的預設值為0,而不是None

12 設定沖突參數

沖突參數是指,兩個參數隻能二選其一。

代碼如下:

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")

args = parser.parse_args()

print("可選參數verbosity的值為{}".format(args.verbose))
print("可選參數quiet的值為{}".format(args.quiet))
           

不同方式多次執行:

MacBook-Pro:Desktop yao$ python 1.py
可選參數verbosity的值為False
可選參數quiet的值為False
MacBook-Pro:Desktop yao$ python 1.py -v
可選參數verbosity的值為True
可選參數quiet的值為False
MacBook-Pro:Desktop yao$ python 1.py -q
可選參數verbosity的值為False
可選參數quiet的值為True
MacBook-Pro:Desktop yao$ python 1.py -v -q
usage: 1.py [-h] [-v | -q]
1.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
MacBook-Pro:Desktop yao$ python 1.py -h
usage: 1.py [-h] [-v | -q]

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose
  -q, --quiet
           

請讀者根據執行結果自行思考沖突參數的設定以及特點。