www.colben.cn/content/post/python-op.md
2021-11-14 14:32:08 +08:00

105 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Python 的 optionparser 模块"
date: 2019-10-30T17:46:52+08:00
lastmod: 2019-10-30T17:46:52+08:00
tags: ["python", "optionparser"]
categories: ["python"]
---
# 生成标准的、符合Unix/Posix 规范的命令行说明
```python
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-p', '--pdbk', action = 'store_true', dest = 'pdcl', default = False,
help = 'write pdbk data to oracle db')
parser.add_option('-z', '--zdbk', action = 'store_true', dest = 'zdcl', default = False,
help = 'write zdbk data to oracle db')
(options, args) = parser.parse_args()
if options.pdcl == True:
print 'pdcl is true.'
if options.zdcl == True:
print 'zdcl is True.'
```
# 简单流程
```python
#引入OptionParser类创建OptionParser对象
from optparse import OptionParser
parser = OptionParser()
# 定义命令行参数
parser.add_option(opt_str, ..., attr = value, ...)
# 解析命令行参数
(options, args) = parser.parse_args()
```
# parse_args 和 add_options 函数
- parse_args() 接收一个命令行列表,默认使用 sys.argv\[:-1\]
- 返回两个值options 保存命令行参数值args 是由 positional arguments 组成的列表
- add_option() 用来加入选项parse_args() 解析选项
```python
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-f', '--file', dest = 'filename', metavar = 'FILE',
help = 'write report to FILE')
parser.add_option('-q', '--quit', action = 'store_false', dest = 'verbose', default = True,
help = 'Don\'t print status message to stdout.')
(options, args) = parser.parse_args()
```
- action 默认 store 表示将参数值保存到 options 对象里
```python
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-f', '--file', action = 'store', type = 'string', dest = 'filename')
args = ['-f', 'foo.txt']
(options, args) = parser.parse_args(args)
print options.filename
```
- type 默认 'string',也可以是 'int' 或 'float' 等长参数名可选dest 未指定时将用命令行的参数名来存取 options 对象的值
- store 其他两种形式store_true 和 store_false还有 store_const、append、count、callback
```python
parser.add_option('-v', action = 'store_true', dest = 'verbose')
parser.add_option('-q', action = 'store_false', dest = 'verbose')
#当解析到 '-v', options.verbose 为 True解析到 '-q'options.verbose 为 False
```
- default 设置参数默认值
```
parser.add_option('-f', action = 'store', dest = 'filename', default = 'foo.txt')
parser.add_option('-v', action = 'store_true', dest = 'verbose', default = True)
#也可以使用 set_default()
parser.set_defaults(filename = 'foo.txt', verbose = True)
parser.add_option(...)
(options, args) = parser.parse_args()
```
- help 生成帮助信息
```python
usage = 'usage: %prog [options] arg1 arg2'
parser = OptionParser(usage = usage)
parser.add_option('-v', '--verbose', action = 'store_true', dest = 'verbose', default = True,
help = 'make lots of noise [default]')
parser.add_option('-q', '--quiet', action = 'store_false', dest = 'verbose',
help = 'be very quiet')
parser.add_option('-f', '--filename', metavar = 'FILE',
help = 'write output to FILE')
parser.add_option('-m', '--mode', metavar='MODE', default = 'intermediate',
help = 'interaction mode: novice, intermediate, or expert [default: %default]')
```
# 备注
- optparse 解析到 help 后不再解析其他命令行参数usage 信息会优先打印,默认 "usage: %prog \[options\]"
- metavar 提醒用户该参数期待的参数,如 metavar = 'mode' 会在帮助中显示成 -m MODE, --mode=MODE
# OptionGroup 参数分组
```python
group = OptionGroup(parser, 'Dangerous Options',
'Caution: use these options at your own risk. It is believed that some of them bite.')
group.add_option('-g', action = 'store_true', help = 'Group option.')
parser.add_option_group(group)
```
- version 创建OptionParser对象时指定该参数会解释成 --version 命令行参数
- optparser 可以自动探测并处理一些用户异常,也可以使用 parser.error() 方法来自定义部分异常的处理
```
if options.a and options.b:
parser.error('options -a and -b are mutually exclusive')
```