OptionParser 是python内置的功能非常强大的命令行参数解析模块,它使用灵活,可以方便的生成标准的、符合Unix/Posix 规范的命令行说明,下面用一个非常小的示例来向你展示它的功能和使用方法,创建demo.py文件
import sys
from optparse import OptionParser
parser = OptionParser(
usage="python %prog [OPTION]",
description="酷python,分享最专业的python技术",
version="1.1"
)
parser.add_option("-n", "--name", action="store", dest="username", help="姓名")
parser.add_option("-a", "--age", action="store", help="年龄", type=int, default=20)
parser.add_option("-d", "--address", action="store", help="住址", metavar="北京")
parser.add_option("-f", "--friends", action="append", help="朋友")
parser.add_option("-t", "--times", action="count", help="次数")
parser.add_option('-o', "--out", action="store_true", help="是否输出")
if __name__ == '__main__':
(options, args) = parser.parse_args(sys.argv[1:])
print(options, args)
print(options.age)
print(options.username)
OptionParser 可以自动生成程序的help说明,它有助于用户了解程序能够提供的功能,在命令行里行下面的命令
python demo.py --help
输出结果
Usage: python demo.py [OPTION]
酷python,分享最专业的python技术
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-n USERNAME, --name=USERNAME
姓名
-a AGE, --age=AGE 年龄
-d 北京, --address=北京 住址
-f FRIENDS, --friends=FRIENDS
朋友
-t, --times 次数
-o, --out 是否输出
输出help信息时,程序执行完(options, args) = parser.parse_args(sys.argv[1:]) 就会退出。
这些help信息就包含两部分,一部分是创建OptionParser对象时设置的usage和description,一部分是使用add_option添加的参数信息。
usage 是使用示例说明,OptionParser允许传入prog参数,该参数默认是当前所执行的脚本,就本例而言prog的值是demo.py,prog的值被用于格式化usage。description 是对程序功能的描述。
option部分由add_option所添加的参数构成,此外还有--version 和 --help 这两个原生存在的参数。
添加命令行选项使用add_option 方法,下面重点讲解该函数的参数。
选项的名称分短名称和长名称,短名称只能是横杠和一个字母的组合,长名称必须是两个横杠和一个单词的组合。
这两个名称至少定义一个,都不定义是错误的。
在命令行传入参数时,任选其一使用,但要注意使用的方法有区别:
这个参数有以下值可用:
下面的4个实例分别演示action在取不同值时的效果
# store
python demo.py -n cool
{'username': 'cool', 'age': None, 'address': None, 'friends': None, 'times': None, 'out': None} []
# store_true
python demo.py --out
{'username': None, 'age': None, 'address': None, 'friends': None, 'times': None, 'out': True} []
# append
python demo.py -f 小明 -f 小刚
{'username': None, 'age': None, 'address': None, 'friends': ['小明', '小刚'], 'times': None, 'out': None} []
# count
python demo.py -t -t
{'username': None, 'age': None, 'address': None, 'friends': None, 'times': 2, 'out': None} []
dest设置选项的目标变量名,如果不设置这个参数,那么目标变量名是长名称,没有长名称则使用短名称,在上面的示例中,我为姓名设置了dest参数,那么最终的目标变量名就是username
type指定目标变量的类型,以年龄为例,它的类型我设置为int,OptionParser会对传入的值做类型转换,如果你传入字符串会报错
python demo.py -a fff
Usage: python demo.py [OPTION]
demo.py: error: option -a: invalid integer value: 'fff'
为选项设置默认值,如果命令行里没有设置该选项则选项的值为默认值,本示例中age的默认值是20
python demo.py -n cool
{'username': 'cool', 'age': 20, 'address': None, 'friends': None, 'times': None, 'out': None} []
选项的解释说明
指定在帮助信息中显示选项值的名称,在示例中,我为住址设置了metavar, 在help信息里你可以看到如下的内容
-d 北京, --address=北京 住址
它的作用是为用户提供单个选项的使用示例。
在命令行里设置可选项时,可选项的顺序不影响解析,不必非得按照add_option添加选项的顺序设置选项值,顺序可以打乱。
除了这些选项,你仍然可以向程序传递其他参数,解析后,选项的信息保存在options里,参数的信息保存在args
python demo.py -n cool --age=20 -f 小刚 -o test1 test2 test3
{'username': 'cool', 'age': 20, 'address': None, 'friends': ['小刚'], 'times': None, 'out': True} ['test1', 'test2', 'test3']
在为选项设置完值以后,我增加了3个参数,这3个参数不在我所添加的选项里,被识别为args。
arg的添加同样可以不考虑顺序问题,下面的命令同样可以被正确解析
python demo.py -n cool test1 --age=20 test2 -f 小刚 -o test3
{'username': 'cool', 'age': 20, 'address': None, 'friends': ['小刚'], 'times': None, 'out': True} ['test1', 'test2', 'test3']
但我强烈不建议你这么做,因为看起来太乱了,造成使用时的困惑。
选项的值存储在options对象中,参数的值以列表的形式存储在args中
if __name__ == '__main__':
(options, args) = parser.parse_args(sys.argv[1:])
print(options, args)
print(options.age)
print(options.username)
QQ交流群: 211426309