argparse 命令引數模組簡介

2021-10-19 14:59:49 字數 4289 閱讀 6056

argparse模組在pyhon3.2中新增到標準庫中

argparse模組可以讓我們更方便的開發命令列引數輸入。該模組定義了需要什麼引數,並且自動從sys.ar**中解析引數; 該模組還會自動生成help, usage資訊,當使用者輸入出錯時,自動提示。

python還有兩個類似的模組getopt(類似於c的getopt),和optparse(不推薦使用), argparse是基於optparse的。

如果使用者熟悉c的getopt可以用getopt。 如果不熟悉則建議使用argparse,使用argparse可以減少**量,並且得到更好的幫助和錯誤資訊。

命令列引數需要什麼功能?

必選引數

可選的,指定引數,一般指定引數會有長引數和短引數

可選引數需要有值

引數型別

help或者是usage幫助資訊

輸入有誤時的提示

import argparse

parser = argparse.argumentparser() #建立乙個parser物件

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

必須傳的引數,不傳則報錯

基本help是幫助資訊

parser.add_argument("echo")  #新增佔位引數

parser.add_argument("square", help="display a square of a given number")

預設情況下,argparse把所有引數預設為strings型別,如果是其他型別,需要指定。

parser.add_argument("square", help="display a square of a given number", type=int)
這種情況下,可選引數是需要傳入值的。

parser.add_argument("--verbosity", help="increase output verbosity")
使用action="store_true", 它的幫助文字和普通的可選引數也不同。

它的預設為false, 當指定時,為true

parser.add_argument("--verbose", help="increase output verbosity", action="store_true")
佔位引數和可選引數,無論是在定義,還是在使用時的位置都不是固定的。任意位置傳入引數皆可,但需要注意,需要傳入的引數,一定要傳入。

choices: 指定數值選擇範圍, 引數的值只能從這幾個裡面選,如果不在其中,將會報錯

parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity")
指定一次值為1 eg: -v

指定兩次值為2 eg: -vv

以下是通過action的"count"這個值來實現的。這樣就讓可指定可選範圍的引數更加像是乙個flag,

如果不指定,則預設值為none。

parser.add_argument("-v", "--verbosity", action="count", help="increase output verbosity")
使用default選項來為物件指定預設引數

parser.add_argument("-v", "--verbosity", action="count", default=0, help="increase output verbosity")
使用方法add_mutually_exclusive_group()生成的物件新增的引數,是互斥的。

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")

prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

在生成物件時,傳入description引數,將會顯示在help中。

parser = argparse.argumentparser(description="calculate x to the power of y")

#使用help後,得到說明

usage: prog.py [-h] [-v ] [--verbose] [-g] [-t | -p] url data

calculate x to the power of y

# 想要多次指定引數
還有另乙個可以控制多個引數的,是nargs引數。需要用時請自行查閱。

import argparse

# 使用description進行命令列的整體說明

parser = argparse.argumentparser(description="calculate x to the power of y")

# 必選引數

parser.add_argument("url", help="url is used to get the page source")

# 指定了引數型別的必選引數

parser.add_argument("data", help="url is used to get the page source", type=int)

# 可選引數,且指定了引數可選擇的範圍

parser.add_argument("-v", "--verbosity", help="increase output verbosity", choices=[0, 1, 2])

# 可以不寫傳入引數的要選引數, 預設為false,指定為true

parser.add_argument("--verbose", help="increase output verbosity",

action="store_true")

# -g -gg, 可使用多個的引數型別。

parser.add_argument("-g", "--gcount", action="count",

help="you can use -g, -gg ,-ggg", default=0)

# 互斥引數 以下指定 -t -p 為互斥引數,不要同時出現。常見選項有-q, -v

group = parser.add_mutually_exclusive_group()

group.add_argument("-t", "--verbose2", action="store_true")

group.add_argument("-p", "--quiet", action="store_true")

args = parser.parse_args()

print("urls", args.url)

print("data * 2", args.data * 2)

print("verbosity", args.verbosity)

print("verbose", args.verbose)

print("gcount", args.gcount)

官方文件:

來自這一篇

argparse 命令含引數模組

argparse是python的乙個命令列引數模組,可以解析命令列引數,生成幫助等。你可以這樣使用它 python usr bin python from argparse import argumentparser p argumentparser usage it is usage tip de...

python獲取命令引數 argparse模組

示例 如下 1 encoding utf 8 2import argparse34 defmain args 5print address format args.code address args.address會報錯,因為指定了dest的值 6print flag format args.fla...

Python getopt命令列引數模組

getopt模組專門用來處理命令列引數 getopt模組有兩個函式,兩個屬性 函式 getopt.getopt getopt.gnu getopt 屬性 getopt.error getopt.getopterror getopt.getopt args,shortopts longopts 引數a...