python自动化配置脚本分析
2016-04-01 18:38
836 查看
python 默认ascii 编码,需要添加声明文件编码注释
optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。
引入
创建OptionParser实例
上面的%prog(自动解析为文件名)
如果用户没有提供自定义的使用方法信息,optparse 会默认使用: “usage: %prog [options]”, 当使用version参数的时候,optparse自动为你的解析器增加–version选项。
add_option()添加可解析命令
参数说明:
* action:工作方式,基本的有三种store、store_false、store_true,默认为store,是将命令行中你在-x 后面的输入存储到options字典中对应key的value位置。而store_false和store_true则是将相应的位置置为false和true
* type:类型(存储类型) 默认为string
* dest:存储的变量
* default:默认值
* help:帮助信息
之后就是对输入进行解析啦
(options, args) = parser.parse_args()
输出有两个
options,一个对象包含所有选项的值,如,如果–file接受一个字符串参数,那么option.file 将是用户提供的文件名,如果用户没有提供选项值那它就是None.
args,位置参数列表解析后剩下的选项参数
这样OptionParser就配置完了,举个小例子
定义了5个命令,-c -f -g -v -q
执行结果
这里由于都解析了,所以args的输出是一个空的list。
give的类型定义为int,所以可以进行运算
-v 命令将verbose项置为true
查看版本号
filename非法的时候会返回error
查看帮助
没处理的输入会存到argvs中
另外action也可以是自己定义的函数,例如
以上,我们基于OptionParser 写了个小脚本,可以解析命令行来获取信息,实现我们的效果。
老版本的Python,except语句写作”except Exception, e”,Python 2.6后应写作”except Exception as e”。
使用
except Exception as e
可以捕获除与程序退出sys.exit()相关之外的所有异常。
finally表示无论是否有异常,都将被执行:
-read(filename) 直接读取文件内容
-sections() 得到所有的section,并以列表的形式返回
-options(section) 得到该section的所有option
-items(section) 得到该section的所有键值对
-get(section,option) 得到section中option的值,返回为string类型
-getint(section,option) 得到section中option的值,返回为int类型
举个例子吧
首先导入模块,然后建立一个针对目的文件的config对象,可以通过该对象读取配置文件
配置文件结构
文件内容
输出结果
思路还是很清晰的。跟上面的结合,就是可以将我们需要的section等内容通过脚本的args传进来,然后读文件相应内容就可以了
# -*- coding: utf-8 -*-
OptionParser
模块用于处理命令行参数:optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。
引入
from optparse import OptionParser
创建OptionParser实例
usage= 'usage: %prog [options] arg' version="%prog 1.0" parser = OptionParser(usage=usage,version=version)
上面的%prog(自动解析为文件名)
如果用户没有提供自定义的使用方法信息,optparse 会默认使用: “usage: %prog [options]”, 当使用version参数的时候,optparse自动为你的解析器增加–version选项。
add_option()添加可解析命令
参数说明:
* action:工作方式,基本的有三种store、store_false、store_true,默认为store,是将命令行中你在-x 后面的输入存储到options字典中对应key的value位置。而store_false和store_true则是将相应的位置置为false和true
* type:类型(存储类型) 默认为string
* dest:存储的变量
* default:默认值
* help:帮助信息
parser.add_option("-f","--file",dest="filename",type="string",help="print file") parser.add_option("-g","--give",action="store",type="int",dest="give",help="give int") parser.add_option("-v", action="store_true", dest="verbose") parser.add_option("-q", action="store_false", dest="verbose")
之后就是对输入进行解析啦
(options, args) = parser.parse_args()
输出有两个
options,一个对象包含所有选项的值,如,如果–file接受一个字符串参数,那么option.file 将是用户提供的文件名,如果用户没有提供选项值那它就是None.
args,位置参数列表解析后剩下的选项参数
这样OptionParser就配置完了,举个小例子
定义了5个命令,-c -f -g -v -q
#!/usr/bin/env python # -*- coding: utf-8 -*- from optparse import OptionParser import os import sys def main () : usage = "usage: %prog [options] " version="%prog 1.0" parser = OptionParser(usage=usage,version=version) parser.add_option("-c", "--config", dest="config",help="read config from CONFIG FILE") parser.add_option("-f","--file",dest="filename",type="string",help="print file") parser.add_option("-g","--give",action="store",type="int",dest="give",help="give int") parser.add_option("-v", action="store_true", dest="verbose") parser.add_option("-q", action="store_false", dest="verbose") (options, args) = parser.parse_args() print options, args if options.give: print options.give+1 if options.filename: print options.filename if not os.path.isfile(options.filename): parser.error(options.filename + " is not a file") if __name__ == "__main__" : main()
执行结果
python try2.py -v -f /opt/deploy/bin/temp.txt -g 10 {'give': 10, 'config': None, 'verbose': True, 'filename': '/opt/deploy/bin/temp.txt'} [] 11 /opt/deploy/bin/temp.txt
这里由于都解析了,所以args的输出是一个空的list。
give的类型定义为int,所以可以进行运算
-v 命令将verbose项置为true
查看版本号
python try2.py --version try2.py 1.0
filename非法的时候会返回error
python try2.py -f aaa {'give': None, 'config': None, 'verbose': None, 'filename': 'aaa'} [] aaa Usage: try2.py [options] try2.py: error: aaa is not a file
查看帮助
python try2.py --help Usage: try2.py [options] Options: --version show program's version number and exit -h, --help show this help message and exit -c CONFIG, --config=CONFIG read config from CONFIG FILE -f FILENAME, --file=FILENAME print file -g GIVE, --give=GIVE give int -v -q
没处理的输入会存到argvs中
python try2.py -g 10 heiheihei {'give': 10, 'config': None, 'verbose': None, 'filename': None} ['heiheihei'] 11
另外action也可以是自己定义的函数,例如
parser.add_option("-f","--file",action=act(sys.argv[2:]),dest="filename",help="print file")
以上,我们基于OptionParser 写了个小脚本,可以解析命令行来获取信息,实现我们的效果。
try except
考虑到会存在输入非法的情况,那么我们就需要熟练使用判断异常的代码捕捉某异常
try: f = open("file-not-exists", "r") except IOError,e: print("open exception: %s: %s\n" %(e.errno, e.strerror))
老版本的Python,except语句写作”except Exception, e”,Python 2.6后应写作”except Exception as e”。
捕捉全部异常
try: do something except: handle except
会捕获所有异常,包括键盘中断和程序退出请求(用sys.exit()就无法退出程序了,因为异常被捕获了),因此慎用。
使用
except Exception as e
可以捕获除与程序退出sys.exit()相关之外的所有异常。
else与finally
else表示如果try中的代码没有引发异常,则会执行else:try: f = open("foo", "r") except IOError as e: ... else: data = f.read()
finally表示无论是否有异常,都将被执行:
try: f = open("foo", "r") except IOError as e: ... finally: f.close()
ConfigParser解析配置文件
函数-read(filename) 直接读取文件内容
-sections() 得到所有的section,并以列表的形式返回
-options(section) 得到该section的所有option
-items(section) 得到该section的所有键值对
-get(section,option) 得到section中option的值,返回为string类型
-getint(section,option) 得到section中option的值,返回为int类型
举个例子吧
首先导入模块,然后建立一个针对目的文件的config对象,可以通过该对象读取配置文件
#!/usr/bin/env python # -*- coding: utf-8 -*- import ConfigParser def main () : config_file="/opt/deploy/bin/temp.conf" config=ConfigParser.ConfigParser() config.read(config_file) hosts = config.get("env","hosts") for host in hosts.split(","): print "host",host print config.items("example") print config.options("example") if __name__ == "__main__" : main()
配置文件结构
[section1] option = value
文件内容
[env] hosts =192.168.2.1,192.168.2.2,192.168.2.3 heiheihei=hohohoho [example] example1=1 example2=2 example3=3
输出结果
root@aaa# python try3.py host 192.168.2.1 host 192.168.2.2 host 192.168.2.3 [('example1', '1'), ('example2', '2'), ('example3', '3')] ['example1', 'example2', 'example3']
思路还是很清晰的。跟上面的结合,就是可以将我们需要的section等内容通过脚本的args传进来,然后读文件相应内容就可以了
ssh
相关文章推荐
- Python实现 zip解压缩到指定目录
- 学习python单元测试框架nose之---04nose的html测试报告输出
- Python使用XPATH解析特定结构XML文件速度提升方法
- 学习python单元测试框架nose之---03nose的xml测试报告输出
- 使用python的zabbix_api模块
- 学习python单元测试框架nose之---02nose多进程并行测试
- IP地址地理位置接口(python版)
- 学习python单元测试框架nose之---01nose框架初探
- python 多线程
- A Byte of Python 笔记(9) 面向对象编程
- [Java学习] Iterator, foreach, generics and callback in Java, C# and Python
- Python kmean
- Install Python 3.5.1 on Windows
- python文件和目录操作方法大全(含实例)
- python rpyc的应用 ——聊天的功能(带认证)
- Python开发测试工具(一)—Monkey
- python之js/url/python互动
- numpy
- python依赖包numpy、scipy、scikit-learn运行冲突解决方案
- think python学习心得-(6)利用words.txt来进行填字游戏