Python 内置模块 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 条评论