Python 内建包-optparse

1. wiki

optparse 是 python 内建模块,用于处理命令行参数。

使用时可以利用长短选项就行优雅传参,如

1
2
<yourscript> -name hello --file=test.txt --quiet
<yourscript> -h

2. 使用

2.1. 初始化 parser = OptionParser()

初始化一个 OptionParser ,其有 2 个参数

1
parser = OptionParser(usage='Usage: %prog [options] arg1 arg2 ...',version='%prog 1.0')
  • usage : 定义使用方法,会展示在 --help 首行
  • version : 用来显示当前脚本的版本

其还有一些预置参数,方便调用

  • %prog : 等同于os.path.basename(sys.argv[0]),即当前运行的脚本的名字

2.2. 添加参数 parser.add_option()

向该实例中添加选项,常用的有 7 个参数

1
2
3
4
5
6
7
parser.add_option('-f','--file',
dest='filename',
action='store',
metavar='FILE',
default='test.txt',
type=str,
help='File that needed handled')
  • -f,--file : 表示一个是短 option 一个是长 option,有 1 个即可
  • dest : 将 option 后面的值保存到该选项后的变量中,之后使用 . 调用
  • action : 表示将 option 后面的值如何处理,常用的有 store,store_true,store_false
    • store : 默认类型,将 option 后值存储到 dest 后的参数中,可以使用 option.filename 调用
    • store_true : 无需提供 option 后的值,会保存布尔值 true 到 dest 指定的变量中
    • store_false : 无需提供 option 后的值,会保存布尔值 false 到 dest 指定的变量中
  • metavar : 在显示帮助时显示,未指定时,会显示 dest 所指定的变量名
  • default : 该 option 的默认值,如果参数后面没有指定值,将默认为变量 default 的值
  • help : 显示的帮助提示信息
  • type : 表示这个参数值的类型必须是 str 字符型,如果是其他类型那么将强制转换为 str(可能会报错)

2.3. 添加参数分组 group = OptionGroup()

可选,有时候为将参数进行分类,此时可调用 OptionGroup 类,定制以组显示的选项参数,其有 3 个参数

1
group = optparse.OptionGroup(parser, title, description=None)
  • parser : OptionParser 初始化后的实例
  • title : 组名,会在组首行打印
  • description : 组的详细描述

使用方法为

  1. group.add_option() : 向组内添加选项,参数与 parser 相同
  2. parser.add_option_group(group) : 将组注册到 OptionParser 实例中

2.4. 解析参数值 parser.parse_args()

调用解析 parse_args() 解析后,返回的 2 个值

1
options,args = parser.parse_args()
  • options : 是一个对象(optpars.Values),保存有命令行参数值。只要知道 dest 参数名,就可以访问其对应的值,如 options.filename
  • args : 是一个位置参数的列表

3. 实战

下述为使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# coding = utf-8

from optparse import OptionParser
from optparse import OptionGroup

# 1. 初始化之
parser = OptionParser(usage='Usage: %prog [options] arg1 arg2 ...',version='%prog 1.0')

# 2. 自定义 4 个选项
parser.add_option('-f','--file',
action='store',dest='filename',type=str,
metavar='FILENAME',help='File that needed handled.')
parser.add_option('-m','--mode',
default='standalone',
help='Interaction mode:local,standalone,yarn,k8s.')
parser.add_option('-v','--verbose',
action='store_true',dest='verbose',default=True,
help='Show details.')
parser.add_option('-q','--quiet',
action='store_false',dest='verbose',
help="Not show details.")

# 3. 定制以组显示的 option,并注册,以下定义了两个组
# 3.1
group = OptionGroup(parser,'Dangerous Options',
'Caution: use these options at your own risk.')
group.add_option('-g',action='store_true',help='Group option.')
# 将组注册到 OptionParser 实例中
parser.add_option_group(group)

# 3.2
group = OptionGroup(parser,'Debug Options')
group.add_option('-d','--debug',action='store_true',
help='Print debug information.')
group.add_option('-s','--sql',action='store_true',
help='Print all SQL statements executed')
group.add_option('-e',action='store_true',help='Print every action done')
# 将组注册到 OptionParser 实例中
parser.add_option_group(group)

# 4. 解析脚本输入的参数值
(options,args) = parser.parse_args()

当使用命令行执行 python.exe demo_optparase.py --help ,或在代码中调用 parser.print_help(),显示结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Usage: demo_optparase.py [options] arg1 arg2 ...

Options:
--version show program's version number and exit
-h, --help show this help message and exit
-f FILENAME, --file=FILENAME
File that needed handled.
-m MODE, --mode=MODE Interaction mode:local,standalone,yarn,k8s.
-v, --verbose Show details.
-q, --quiet Not show details.

Dangerous Options:
Caution: use these options at your own risk.

-g Group option.

Debug Options:
-d, --debug Print debug information.
-s, --sql Print all SQL statements executed
-e Print every action done