一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
1. wiki
optparse 是 python 内建模块,用于处理命令行参数。
使用时可以利用长短选项就行优雅传参,如
<yourscript> -name hello --file=test.txt --quiet
<yourscript> -h
2. 使用
2.1. 初始化 parser = OptionParser()
初始化一个 OptionParser
,其有 2 个参数
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 个参数
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 个参数
group = optparse.OptionGroup(parser, title, description=None)
parser
: OptionParser 初始化后的实例title
: 组名,会在组首行打印description
: 组的详细描述
使用方法为
group.add_option()
: 向组内添加选项,参数与 parser 相同parser.add_option_group(group)
: 将组注册到 OptionParser 实例中
2.4. 解析参数值 parser.parse_args()
调用解析 parse_args()
解析后,返回的 2 个值
options,args = parser.parse_args()
options
: 是一个对象(optpars.Values
),保存有命令行参数值。只要知道dest
参数名,就可以访问其对应的值,如options.filename
args
: 是一个位置参数的列表
3. 实战
下述为使用实例
# 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()
,显示结果如下:
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