Python 内置模块 argparse 的使用

argparse 官方文档

说明: argparse 模块是写 Python 脚本经常使用到的内置库之一。

参数作为属性值输出

# demo.py
import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("-a", "--all", action="store_true", help="list all")
    b = parser.parse_args()
    print(b)
    if b.all:
        print(b.all)

参数 -a 表示标签名, --all 是标签的别名, action="store_true" 表示带有 -a/--all

时对应的 b.all 为 True

使用命令 python ./demo.py -a, 打印如下:

Namespace(all=True)
True

使用命令 python ./demo.py --help, 打印如下:

usage: django [-h] [-a]

django2.0

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

跟平时使用命令的 help 帮助选项一样有没有?

import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("-v", action="count", help="square the number")
    b = parser.parse_args()
    print(b)
    if b.v:
        print(b.v)

使用命令 python ./demo.py -v,打印如下:

Namespace(v=1)
1

使用命令 python ./demo.py -v -v,打印如下:

Namespace(v=2)
2
import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("-v", action="append", help="square the number")
    b = parser.parse_args()
    if b.v:
        print(b.v)

使用命令 python ./demo.py -v 90,打印如下:

['90']

使用命令 python ./demo.py -v 90 -v 89,打印如下:

['90', '89']

add_argument 方法

参数名称以 -/--/多个-开头时, 标签名字为去掉-之后的字符串,

action="store_true": 表示以布尔值表示该标签是否出现,

action="count": 表示该标签出现的次数总和

action="append": 表示该标签携带的参数组合为一个 list 列表

指定参数类型

import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("square", help="square the number", type=int)
    b = parser.parse_args()
    print(b)
    if b.square:
        print(b.square**2)

使用命令 python ./demo.py 2, 打印如下:

Namespace(square=2)
4
import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("name", choices=["as", "def"], help="square the number")
    parser.add_argument("asd", type=argparse.FileType("r"))
    b = parser.parse_args()
    print(b)
    for line in b.asd:
        print(line.strip())
    if b.name:
        print(b.name)

使用命令 python ./demo.py as manage.py, 打印如下:

Namespace(asd=<_io.TextIOWrapper name='manage.py' mode='r' encoding='UTF-8'>, name='as')
#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django2learning.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
as

设置默认值

import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("-v", help="square the number", default=0)
    b = parser.parse_args()
    print(b)
    if b.v:
        print(b.v)

使用命令 python ./demo.py, 打印如下:

Namespace(v=0)

在命令行中指定参数值,python ./demo.py -v op, 打印如下:

Namespace(v='op')
op

位置参数

import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("v", help="square the number", type=int)
    b = parser.parse_args()
    if b.v:
        print(b.v)

使用命令 python ./demo.py 90, 打印如下:

90

parser.add_argument('num', nargs=2, type=int)

表示脚本可以读入两个整数赋予 num 键(此时的值为2个整数的数组)。

nargs 还可以'*'用来表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值;

‘+’表示读取至少1个该位置参数。

'?'表示该位置参数要么没有,要么就只要一个

import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("v", nargs=2,help="square the number", type=int)
    b = parser.parse_args()
    if b.v:
        print(b.v)

使用命令 python ./demo.py 90 45, 打印如下:

[90, 45]
import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("v", nargs='*',help="square the number", type=int)
    b = parser.parse_args()
    if b.v:
        print(b.v)

使用命令 python ./demo.py 90 45 89, 打印如下:

[90, 45, 89]

必需参数

import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("-v", required=True, help="square the number", default=0)
    b = parser.parse_args()
    print(b)
    if b.v:
        print(b.v)

在命令行中指定参数值,python ./demo.py -v, 打印如下:

usage: django [-h] -v V
django: error: argument -v: expected one argument

在命令行中指定参数值,python ./demo.py -v 90, 打印如下:

Namespace(v='90')
90

候选参数

import argparse


def start():
    parser = argparse.ArgumentParser(prog="django", description="django2.0")
    parser.add_argument("name", choices=["as", "def"], help="square the number")
    b = parser.parse_args()
    print(b)
    if b.name:
        print(b.name)

在命令行中指定参数值,python ./demo.py as, 打印如下:

Namespace(name='as')
as

在命令行中指定参数值,python ./demo.py ad, 打印如下:

usage: django [-h] {as,def}
django: error: argument name: invalid choice: 'ad' (choose from 'as', 'def')

发表评论

评论内容
 

评论列表, 共 0 条评论