美文网首页python技巧
python内置包 argparse使用(解析命令行传参)

python内置包 argparse使用(解析命令行传参)

作者: 陆_志东 | 来源:发表于2018-07-19 15:21 被阅读0次

argparse命令是解析命令行传递的参数工具
比如命令行执行一个python命令
python test.py 10 20
我想要在test.py文件运行的时候拿到传递的参数10和20 就需要使用 argparse 包

使用方法:简单案例

定位参数解析(Positional argument)

# -*- coding: utf-8 -*-

import argparse   # 导包

parser = argparse.ArgumentParser()  # 创建对象
parser.add_argument('integer', type=int, help='display an integer')  # 添加匹配参数规则
# integer 是给获取的参数赋值一个变量名 ,  type 设置匹配的参数类型  help 是使用 -h 时展示的内容
args = parser.parse_args()  # 获取所有参数, 注意不是一个字典,下面获取数据只能用 点 .

print args.integer   # 打印参数

运行结果

python test_argparse.py 10
>>10
python test_argparse.py -h
>>usage: test_argparse.py [-h] integer   # 输出命令的格式,即使用方式
>>positional arguments:
>>integer     匹配整数

# 如果传递参数多于需要的参数,会报错太多的参数

可选参数 案例(Optional argument)

# -*- coding: utf-8 -*-

import argparse

parser = argparse.ArgumentParser()

parser.add_argument("--square", help="display a square of a given number", type=int)
# 添加可选参数,需要在定义变量名的时候加 --
# 命令行调用的时候也要加 -- 变量名
parser.add_argument("--cubic", help="display a cubic of a given number", type=int)

args = parser.parse_args()

if args.square:
    print(args.square**2)

if args.cubic:
    print(args.cubic**3)

调用方式:

如果参数都是可选的,则不传参直接执行运行不会报错
python test_argparse.py 

如果传参,命令行需要加对应的可选参数变量名,命令行调用必须参数传递不需要加变量名
python test_argparse.py --square 10
>> 100

python test_argparse.py --square 10  --cubic 3
>>100
>>27

可选参数和必选参数配合使用

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers',  type=int, nargs='+',   # nargs 指定了至少为1个值,并且存为列表
                   help='an integer for the accumulator')  # 添加必选参数 命令行调用不用加变量名
parser.add_argument('--sum', dest='accumulate', action='store_const',  # dest是将捕获到的可选参数解析为 调用时的变量名
                    # 第12行 是调用 ,也可以理解为 定位参数指定的变量名调用  可选参数以dest指定变量名调用
                   const=sum, default=max,  # default 是不指定可选参数时的默认值,这里使用了python内置方法max
                   help='sum the integers (default: find the max)') # 下面的打印是将integers得到的参数传进来解析
#  action 是将变量存储到const 里面, const又调用python内置函数 sum 求和

args = parser.parse_args()
print(args.accumulate(args.integers))

调用

python test_argparse.py 1 2 3 4
>>4
python test_argparse.py 1 2 3 4 --sum
>>10

下面详解 add_argument命令

add_argument(name or flags...[, action][, nargs][, const][, default]
              [, type][, choices][, required][, help][, metavar][, dest])

name or flags  #选项字符串的名字或者列表,例如 foo 或者 -f, --foo

action  # 命令行遇到参数时的动作,默认值是 store。
    # =store_const,表示赋值为const;
    # =append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
    # =append_const,将参数规范中定义的一个值保存到一个列表;
    # =count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;

nargs - 应该读取的命令行参数个数,可以是具体的数字,
    # 或者是?号,一个参数
    # 当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;
    # 或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。

const - action 和 nargs 所需要的常量值

default - 不指定参数时的默认值。这里指定了python内置的max函数,选取最大值

type - 命令行参数应该被转换成的类型。

choices - 参数可允许的值的一个容器。

required - 可选参数是否可以省略 (仅针对可选参数)。

help - 参数的帮助信息,打印的说明

dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.

相关文章

网友评论

    本文标题:python内置包 argparse使用(解析命令行传参)

    本文链接:https://www.haomeiwen.com/subject/dprtmftx.html