[toc]
## 前言说明
要自己定制程序的参数选项控制, 可以使用 Python 自带的 OptParse 模块。
~~~
import optparse
~~~
> 也可以直接解析 sys.argv 里的参数,但是过于麻烦。
`optparse` 现在不再更新了,它有一个缺陷是如果不输入参数就不校验,所以推荐更新版本 `argparse`.
### 说明
OptParse 支持一般性 GNU 的选项方法,包括:
* 无参选项, `-v`
* 有参选项, `-p value, –para=value`
* 值参一体, `-pvalue` (不支持长参数)
* 合并选项, `-abc, -abcp value` (最后一个可以是有参, 其余均无参)
解析时,`-` 和 `--` 的区别:
* `-` 就看后面的值, 要是无参的, 那继续读下一个; 要是有参的,就把参数读进来(分隔或一体).
* `--` 直接读后面的值;
### 简单例子:
**代码**
~~~
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help = "write report to FILE", metavar = "FILE")
parser.add_option("-q", "--quiet",action = "store_false",
dest = "verbose", default = True,
help = "don't print status messages to stdout")
options, args = parser.parse_args()
print(options)
print(args)
~~~
**生成的使用和帮助信息:**
```
D:\data\my_python\常用模块>test.py -h
Usage: test.py [options]
Options:
-h, --help show this help message and exit
-f FILE, --file=FILE write report to FILE
-q, --quiet don't print status messages to stdout
```
## **具体用法:**
### 一: 创建Optionparser实例
```
from optparse import OptionParser
parser= OptionParser()
```
### 二:命令行选项
```
parser.add_option("-f", "--file", dest="filename",
help = "write report to FILE", metavar = "FILE")
#每个选项也可以有一个短选项和一个长选项,例如-q,--quite
```
选项操作:
1. action:
指定Optionparser解析到一个命令行参数时该如何处理.action有一组固定值可选.
| action的值 | 功能 |
| --- | --- |
| store | 默认,表示将命令行参数值保存在options对象里. |
| store_false| 布尔选项,如果出现了对应的选项,例如-q,则赋值False. |
| store_true| 布尔选项,赋值True |
| store_const| 存储恒定值 |
| callback| :调用指定的函数|
| count| 将计数器递增1 |
| append| 将此选项的参数附加到列表 |
2. dest:
可以决定解析后,取值时的属性名, 不指定时就是选项不加-的字符串.
3. type:
参数的类型,默认”string”,可以为”int”,“float”
4. default:
缺省值. 没有设置缺省值的为None.
5.help:
选项中有 -h 时打印的 help 信息.
6. metavar:
表示显示到 help 中选项的默认值;
### 三:解析参数
使用`options, args = parser.parse_args()
`解析参数
**案例:**
```
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help = "write report to FILE", metavar = "FILE")
options, args = parser.parse_args()
print(options)
print(args)
# options,一个包含所有选项的值的对象.
# args,解析选项后剩余的位置参数列表.
#执行结果
>test.py -f aa.txt
{'filename': 'aa.txt'}
[]
>test.py -f aa.txt cc dd
{'filename': 'aa.txt'}
['cc', 'dd']
```
### 四: optparse处理错误
错误分为程序错误,用户错误和程序定义的错误
* 程序错误:
通常是对OptionParser.add_option()的错误调用.例如:无效的选项字符串,未知的选项属性,缺少选项属性等.
这些通常会引发异常,触发optparse.OptionError或者TypeError,并导致程序崩溃.
* 用户错误:
Optparse可以自动检测一些常见的用户错误,例如输入了错误的参数类型,参数输入缺漏.
* 程序定义的错误
可以调用Optionparser.error()来通知应用程序定义的错误条件.
案例:
定义了一个-t参数,只能输入整数,当输入错误的选项和不输入选项是,都会有提示:
~~~
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-t',dest='time',
type='int',help='只能输入整数')
options, args = parser.parse_args()
#执行结果
>test.py -t #选项未输入
Usage: test.py [options]
test.py: error: -t option requires 1 argument
>test.py -t 1.1 #选项值错误
Usage: test.py [options]
test.py: error: option -t: invalid integer value: '1.1'
~~~
- 基础部分
- 基础知识
- 变量
- 数据类型
- 数字与布尔详解
- 列表详解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浏览器模拟