使用python写出的脚本在运行的时候,是可以传递参数的,一般会使用sys.argv[]来接收用户传的参数。但是如果要实现类似于linux命令的,比如‘ls -l -t /etc/’这种比较复杂的选项和参数时,argv就很难实现了。

而在python 3.2提供了一个argparse模块,可以非常方便我们实现这样的功能。

一、argparse模块

1、参数分类

示例:ls -l –all /etc/

位置参数:设定了一个位置参数,调用的时候就要传递一个实际参数,有点类似于函数的位置形参。例如这里的‘/etc’就是一个位置参数。

选项参数:选项参数有短选项‘-’和长选项‘–’,比如这里的‘-l’是短选项参数,‘–all’是长选项参数。

2、argparse模块使用的一般步骤

① 定义一个参数解析器

② 给这个参数解析器根据需求添加位置参数和选项参数

③ 调用参数解析器的解析方法,获取给这个程序传递的实际值或者默认值

④ 拿到这些值,就可以进行给程序进行使用

3、定义一个参数解析器

格式:argparse.ArgumentParser(prog = sys.argv[0], description, add_help=True) -> 参数解析器

参数说明:生成一个参数解析器

① prog:指定程序名称,默认是脚本名称

② description:描述信息

③ add_help:增加 -h/–help 选项

#定义一个默认参数解析器

arg1 = argparse.ArgumentParser()

#定义一个自定义参数解析器

arg1 = argparse.ArgumentParser(prog='deploy',description='auto deploy tools',add_help=False)

4、给解析器添加参数

① 添加位置参数

add_argument('arg_name', nargs=' ' , type=' ',defalut=' ' , help=' ' ) -> None

参数说明:添加位置参数,位置参数跟添加的顺序有关,当添加了多个位置参数时,值会按顺序传递

arg_name:参数名称,字符串类类型

nargs:位置参数的个数,‘?’表示最多一个,‘+’表示至少一个,‘*’可有任意个,数字表示必须指定数目个

type:命令行参数应该被转换成的类型,如,str或者int

default:参数的默认值,一般和‘?’和‘*’配合使用,因为这两个都可以不提供参数,不提供就使用这个default值

help:帮助信息

import argparse

#定义一个参数解析器

arg1 = argparse.ArgumentParser(prog='deploy',description='auto deploy tools')

#添加一个可以接收多个值的位置参数

arg1.add_argument('path',nargs='*',default='/etc',help='This is a path of the deploy app')

#添加一个最多可以接收一个值的位置参数

arg1.add_argument('result',nargs='?',default='success',help='The result of the deploy app')

#添加一个只能接受一个值的位置参数

arg1.add_argument('date',nargs=1,help="The date of the deploy app,Must non be none")

② 添加选项参数

add_argument(短选项[,长选项], action=' ',type=' ',required='',help= ) -> None

参数说明:

短选项,长选项:根据需要设定

action:命令行遇到参数时的动作,默认值是 store,有以下多种类型可选

store_const:表示赋值为const;

store_true:表示不接受参数,存储为Bool类型的值

append:将遇到的值存储成列表,也就是如果参数重复则会保存多个值

append_const:将参数规范中定义的一个值保存到一个列表

count:存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析

type:命令行参数应该被转换成的类型,如,str或者int

required:是否必选参数

help:帮助信息

import argparse

#定义一个参数解析器

arg1 = argparse.ArgumentParser(prog='deploy',description='auto deploy tools')

#添加位置参数

arg1.add_argument('path',nargs='*',default='/etc',help='This is a path of the deploy app')

arg1.add_argument('result',nargs='?',default='success',help='The result of the deploy app')

arg1.add_argument('date',nargs=1,help="The date of the deploy app,Must non be none")

#添加一个短选项参数

arg1.add_argument('-l',action='store_true',help= 'View details')

#添加一个长短选项参数

arg1.add_argument('-a','--all',action='store_true',help='View all')

5、解析获取参数

parse_args(args=None, namespache=None) -> namespace对象

参数说明:

args:参数列表,如果为None,表示所有定义参数所需的数据都是从外部传递进来。如果非None,表示从内部将数据传给定义的参数,需要传递一个可迭代对象。

namespace对象:不管是通过外部传递的数据,还是内部自定义的数据,最终都会放在namespace对象上,我们可以通过namespace对象的属性获取参数数据,而且如果一旦通过内部传值的方式给参数传递数据之后,外部就算再传值也是无效的。

数据获取:

获取位置参数的数据:位置参数的数据获取通过参数名称获取,获取的值要么是传递的值,要么是默认值,是具体的某一个值,比如:namespace.date,namespace.path。

获取选项参数的数据:选项参数的值,如果action设置的是是“store_ture”,那么就是一个Bool值,True表示使用了这个选项,False表示没有使用这个选项,默认是False,如果是默认的action,那么就是实际传递的值,我们可以通过选项名称来获取,如果有长短选项的,就通过长选项,比如:namespace.l,namespace.all。

6、完整流程演示

⑴ 内部传递数据

import argparse

#定义一个参数解析器

arg1 = argparse.ArgumentParser(prog='deploy',description='auto deploy tools')

#定义位置参数

arg1.add_argument('path',nargs='*',default='/etc',help='This is a path of the deploy app')

arg1.add_argument('result',nargs='?',default='success',help='The result of the deploy app')

arg1.add_argument('date',nargs=1,help="The date of the deploy app,Must non be none")

#定义选项参数

arg1.add_argument('-l',action='store_true',help= 'View details')

arg1.add_argument('-a','--all',action='store_true',help='View all')

#从内部给参数传递值

name1 = arg1.parse_args(['fail','2019-04-04 10:55:02'])

#打印获取到的数据

print('path:',name1.path)

print('result:',name1.result)

print('date:',name1.date)

print('-l:',name1.l)

print('-a:',name1.all)

结果分析:

① 首先看位置参数,我们知道path和result是可以不用传值的,而date是必须接受一个数据的。

② 然后我们在内部传参的时候,是给了2个值,那么自然而然的,按照顺序来说,就会把第一个值送给了path,第二个值给了date。

③ 而我们的选项参数,都没有传参,所有默认都是False

④ 内部传值之后,外部再怎么传值都被忽略无效,所以我们这个时候就算加上-h,也打印不出帮助信息了。

⑵ 外部传递数据

import argparse

#定义一个参数解析器

arg1 = argparse.ArgumentParser(prog='deploy',description='auto deploy tools')

#定义位置参数

arg1.add_argument('path',nargs='*',default='/etc',help='This is a path of the deploy app')

arg1.add_argument('result',nargs='?',default='success',help='The result of the deploy app')

arg1.add_argument('date',nargs=1,help="The date of the deploy app,Must non be none")

#定义选项参数

arg1.add_argument('-l',action='store_true',help= 'View details')

arg1.add_argument('-a','--all',action='store_true',help='View all')

#从外部给参数传递值

name1 = arg1.parse_args()

#打印获取到的数据

print('path:',name1.path)

print('result:',name1.result)

print('date:',name1.date)

print('-l:',name1.l)

print('-a:',name1.all)

调用测试1:没有传递任何参数

说明:因为我们的date参数是必须接受一个值的,而且又没有默认值,所以不给传值就报错了。

调用测试2:传递一个参数

说明:传递的一个参数,给了必须接受一个值的date参数,其他都取默认值

调用测试3:传递一个位置参数和一个选项参数

说明:可以使用选项-a之后,选项参数已经变为True。

python参数解析模块_Python系列教程(三十七):参数解析模块argparse相关推荐

  1. python技术晨讲_python系列教程14

    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好的理解人工智能技术,我让助理负责分享这套python系列教程,希望能帮到大家! 好了,是开始 ...

  2. python乘法表运算_Python入门教程(三):史上最全的Numpy计算函数总结,建议收藏!...

    点击上方 蓝字 关注我们 Numpy提供了灵活的.静态类型的.可编译的程序接口口来优化数组的计算,也被称作向量操作,因此在Python数据科学界Numpy显得尤为重要.Numpy的向量操作是通过通用函 ...

  3. Fastify 系列教程三 (验证、序列化和生命周期)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) Fastify ...

  4. Java容器--2021面试题系列教程(附答案解析)--大白话解读--JavaPub版本

    Java容器–2021面试题系列教程(附答案解析)–大白话解读–JavaPub版本 前言 序言 再高大上的框架,也需要扎实的基础才能玩转,高频面试问题更是基础中的高频实战要点. 适合阅读人群 Java ...

  5. 汇川技术小型PLC梯形图编程系列教程(三):PLC系统程序与用户程序介绍

    原文链接:汇川技术小型PLC梯形图编程系列教程(三):PLC系统程序与用户程序介绍 PLC的定义 可编程逻辑控制器是种专门为在工业环境下应用而设计的数字运算操作电子系统.它采用一种可编程的存储器,在其 ...

  6. 树莓派4B系列教程三 :优化配置

    树莓派4B系列教程三 :优化配置 写在前面 树莓派4B内存增加 CPU温度控制 显存优化 Chromuim缓存转移 优化自启程序 Chromium插件安装 离线安装插件时遇到的问题 结语 写在前面 不 ...

  7. 【SQL开发实战技巧】系列(三十七):数仓报表场景☞从表内始终只有近两年的数据,要求用两列分别显示其中一年的数据聊行转列隐含信息的重要性

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  8. [转载] python标准库系列教程(三)——operator库详细教程

    参考链接: Python中的Inplace运算符| 2(ixor(),iand(),ipow()等) python进阶教程 机器学习 深度学习 长按二维码关注 进入正文 Python基础学习:oper ...

  9. python requests模块_Python 爬虫教程 requests 模块

    经过 前边文章<简单Python爬虫教程 (一)>.简单Python爬虫教程 (二)两篇文章的学习,能写一些比较简单的爬虫了,但是还不够,这一篇文章主要介绍Requests模块,reque ...

最新文章

  1. python3 遍历列表list 四种方法
  2. go 发送http请求; Golang 解析JSON 篇
  3. xgboost之spark上运行-scala接口
  4. Run Length Encoding
  5. Cent OS home下中文目录改成英文目录
  6. Java学习之「Spring + AspectJ 」
  7. Vue之路由push
  8. 品味FastDFS~目录
  9. Jmeter基础篇(01):如何进行post接口压力测试
  10. linux下高性能服务器pdf,Linux高性能服务器编程(pdf+epub+mobi+txt+azw3)
  11. matlab x~=0
  12. 贴片钽电容的封装、尺寸和标…
  13. Excel中常用技巧
  14. scala成长之路(1)基本语法和数据类型
  15. T007V-采购订单税码对应的税率所在后台表
  16. Django 教程之数据库模型
  17. JavaScript弹出模式窗口
  18. App Store ASO必备指南:3个步骤做好aso优化
  19. 通过ADO连接各种数据库的字符串
  20. [html5]离线存储

热门文章

  1. 外卖优惠券返利分销系统外卖返利系统公众号小程序源码saas系统
  2. UltraEdit 25以后的版本 绕过试用期
  3. Android图片不规则裁剪
  4. Hitters数据集数据分析
  5. Python安装libsvm
  6. DM达梦数据库dminit使用手册
  7. HBuilderX代码提示失效解决方案
  8. linux挂载u盘出错_linux挂载U盘、移动硬盘后无法更改权限
  9. Android实现自动点击 - 无障碍服务
  10. android锁屏时间大小,Android 4.4.4 锁屏界面时间大小修改