This commit is contained in:
2021-11-14 14:32:08 +08:00
parent f75ad8bedd
commit b0f6120151
152 changed files with 22219 additions and 8 deletions

104
content/post/python-op.md Normal file
View File

@@ -0,0 +1,104 @@
---
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')
```