[TOC]
## 模块说明
### 1、定义:
argparse是python标准库里面用来处理命令行参数的库,用于代替已经过时的optparse模块
### 2、位置参数和选项参数:
**位置参数**就是程序根据该参数出现的位置来确定的,如:`[root@openstack_1 /]# ls root` 其中`root`是位置参数
**选项参数**是应用程序已经提前定义好的参数,不是随意指定的,如:`[root@openstack_1 /]# ls -l ` ,其中`-l `就是ls命令里的一个选项参数
### 3、使用步骤:
(1)import argparse 首先导入模块
(2)parser = argparse.ArgumentParser() 创建一个解析对象
(3)parser.add_argument() 向该对象中添加你要关注的命令行参数和选项
(4)parser.parse_args() 进行解析
### 4、argparse.ArgumentParser()方法参数:
一般我们只选择用description这一个选项
* prog=None
程序名
* **description=None**
help时显示的开始文字
* epilog=None
help时显示的结尾文字
* parents=[]
若与其他参数的一些内容一样,可以继承
* formatter\_class=argparse.HelpFormatter
自定义帮助信息的格式
* prefix\_chars='-'
命令的前缀,默认是‘-’
* fromfile\_prefix\_chars=None
命令行参数从文件中读取
* argument\_default=None
设置一个全局的选项缺省值,一般每个选项单独设置
* conflict\_handler='error'
定义两个add\_argument中添加的选项名字发生冲突时怎么处理,默认处理是抛出异常
* add\_help=True
是否增加-h/--help选项,默认是True)
### 5、add_argument()方法参数用法:
ArgumentParser.add\_argument(nameor flags...\[, action\]\[, nargs\]\[, const\]\[, default\]\[, type\]\[, choices\]\[, required\]\[, help\]\[, metavar\]\[, dest\])
* **name or flags** :参数有两种,可选参数和位置参数
* **action:**
解析到一个命令行参数时该如何处理.action有一组固定值可选.但一般默认就行
| action的值 | 功能 |
| --- | --- |
| store | 默认,将参数值保存在options对象里. |
| store_const| 存储值const指定的常量中 |
| store_false| 布尔选项,赋值False. |
| store_true| 布尔选项,赋值True |
| count| 统计参数出现的次数|
| append| 将此选项的参数存为列表 |
| append_const| 存为列表,会根据const关键参数添加 |
* **nargs:** 参数的数量
* **const** :保存一个常量
* **default** :默认值
* **type** :参数类型,默认为str
* **choices** :设置参数值的范围,如果choices中的类型不是字符串,记得指定type
* **required** :该选项是否必选,默认为True
* **metaver**:帮助信息中显示的参数名称
* **dest** :参数名
### 6、简单使用
~~~
import argparse
parse=argparse.ArgumentParser(description='我是帮助信息')
parse.add_argument('-f')
parse.add_argument('-q')
args=parse.parse_args()
#执行-h显示帮助
>test.py -h
usage: test.py [-h] [-f F] [-q Q]
我是帮助信息
optional arguments:
-h, --help show this help message and exit
-f F
-q Q
~~~
## 重要参数举例
### name or flags...
必选参数,有可选参数和位置参数两种。可选参数和位置参数不能同时存在
`-f`和`--file` 这种是可选参数中的短参数和长参数,可以有多个
`filename` 这种是位置参数,只能有一个,且必传
若没有指定dest,优先使用长参数做属性名
1. 可选参数案例:
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument('-f','--file')
args=parse.parse_args()
print('args:',args)
print('args.file:',args.file)
#执行结果
>test.py #不传参数也不报错
args: Namespace(file=None)
args.file: None
>test.py -f a.txt #用最后一个参数file做属性名
args: Namespace(file='a.txt')
args.file: a.txt
~~~
2. 位置参数案例
~~~py
import argparse
parse=argparse.ArgumentParser()
parse.add_argument('file')
args=parse.parse_args()
print('args:',args)
print('args.file:',args.file)
#执行结果
>test.py #不带位置参数就报错
usage: test.py [-h] file
test.py: error: the following arguments are required: file
>test.py a.txt #位置参数直接写,不需要写参数名
args: Namespace(file='a.txt')
args.file: a.txt
~~~
### dest属性参数
设置这个选项的value解析出来后放到哪个属性中
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument("-f",'--file',dest='filename')
args=parse.parse_args()
print('args:',args)
#执行结果:
>test.py -f a.txt #和上例子对比,可以发现不同
args: Namespace(filename='a.txt')
~~~
### action动作参数
action 表示值赋予键的方式,默认为store,存储到对象中
* store_const,值存放在const中:
~~~py
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args('--foo'.split())
Namespace(foo=42)
~~~
* store_true和store_false,值存为True或False
```
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.add_argument('--baz', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(bar=False, baz=True, foo=True)
```
* append:存为列表
```
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])
```
* append_const:存为列表,会根据const关键参数进行添加:
```
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--str', dest='types', action='append_const', const=str)
>>> parser.add_argument('--int', dest='types', action='append_const', const=int)
>>> parser.parse_args('--str --int'.split())
Namespace(types=[<type 'str'>, <type 'int'>])
```
* count:统计参数出现的次数
```
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--verbose', '-v', action='count')
>>> parser.parse_args('-vvv'.split())
Namespace(verbose=3)
```
* version:版本
```
>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0
```
### required和type参数
通常-f这样的选项是可选的,但是如果required=True那么就是必须的了,不输入就会报错提醒
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument("-f", required=True,type=int)
args=parse.parse_args()
print('args:',args)
执行结果:
>test.py #不带参数报错
usage: test.py [-h] -f F
test.py: error: the following arguments are required: -f
>test.py -f a.txt #参数类型错误报错
usage: test.py [-h] -f F
test.py: error: argument -f: invalid int value: 'a.txt'
>test.py -f 123 #正常的参数类型不报错
args: Namespace(f=123)
~~~
### choices范围参数
可设置参数的范围,如果choice中的类型不是字符串,要指定type
表示该参数能接受的值只能来自某几个值候选值中,除此之外会报错,用choice参数即可
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument("-f",choices=['aa','bb'])
args=parse.parse_args()
print('args:',args)
#z执行结果:
>test.py -f qq
usage: test.py [-h] [-f {aa,bb}]
test.py: error: argument -f: invalid choice: 'qq' (choose from 'aa', 'bb')
>test.py -f aa
args: Namespace(f='aa')
~~~
### nargs参数
指定这个参数后面的value有多少个,默认为1
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument("-f",nargs=2)
args=parse.parse_args()
print('args:',args)
#执行结果:
>test.py -f a.txt b.txt
args: Namespace(f=['a.txt', 'b.txt'])
~~~
nargs还可以正则表达式
'*'表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值;
‘+’表示读取至少1个该位置参数。'?'表示该位置参数要么没有,要么就只要一个。(PS:跟正则表达式的符号用途一致。)
- 基础部分
- 基础知识
- 变量
- 数据类型
- 数字与布尔详解
- 列表详解list
- 字符串详解str
- 元组详解tup
- 字典详解dict
- 集合详解set
- 运算符
- 流程控制与循环
- 字符编码
- 编的小程序
- 三级菜单
- 斐波那契数列
- 汉诺塔
- 文件操作
- 函数相关
- 函数基础知识
- 函数进阶知识
- lambda与map-filter-reduce
- 装饰器知识
- 生成器和迭代器
- 琢磨的小技巧
- 通过operator函数将字符串转换回运算符
- 目录规范
- 异常处理
- 常用模块
- 模块和包相关概念
- 绝对导入&相对导入
- pip使用第三方源
- time&datetime模块
- random随机数模块
- os 系统交互模块
- sys系统模块
- shutil复制&打包模块
- json&pickle&shelve模块
- xml序列化模块
- configparser配置模块
- hashlib哈希模块
- subprocess命令模块
- 日志logging模块基础
- 日志logging模块进阶
- 日志重复输出问题
- re正则表达式模块
- struct字节处理模块
- abc抽象类与多态模块
- requests与urllib网络访问模块
- 参数控制模块1-optparse-过时
- 参数控制模块2-argparse
- pymysql数据库模块
- requests网络请求模块
- 面向对象
- 面向对象相关概念
- 类与对象基础操作
- 继承-派生和组合
- 抽象类与接口
- 多态与鸭子类型
- 封装-隐藏与扩展性
- 绑定方法与非绑定方法
- 反射-字符串映射属性
- 类相关内置方法
- 元类自定义及单例模式
- 面向对象的软件开发
- 网络-并发编程
- 网络编程SOCKET
- socket简介和入门
- socket代码实例
- 粘包及粘包解决办法
- 基于UDP协议的socket
- 文件传输程序实战
- socketserver并发模块
- 多进程multiprocessing模块
- 进程理论知识
- 多进程与守护进程
- 锁-信号量-事件
- 队列与生产消费模型
- 进程池Pool
- 多线程threading模块
- 进程理论和GIL锁
- 死锁与递归锁
- 多线程与守护线程
- 定时器-条件-队列
- 线程池与进程池(新方法)
- 协程与IO模型
- 协程理论知识
- gevent与greenlet模块
- 5种网络IO模型
- 非阻塞与多路复用IO实现
- 带着目标学python
- Pycharm基本使用
- 爬虫
- 案例-爬mzitu美女
- 案例-爬小说
- beautifulsoup解析模块
- etree中的xpath解析模块
- 反爬对抗-普通验证码
- 反爬对抗-session登录
- 反爬对抗-代理池
- 爬虫技巧-线程池
- 爬虫对抗-图片懒加载
- selenium浏览器模拟