配置核查模块 开发总结 (1)
2015-07-27 11:26
411 查看
到最后终于在deadline之前将开发工作进行完了。虽然遇到一些坑但是过程还算顺利,从两个月前的预研,设计,到最后的开发,算是大姑娘上轿头一回,独立的完成了软件开发周期的这三个过程。
以下记录一些在开发过程中遇到的问题以及解决办法:
在实现上遇到的一些问题:
配置核查,顾名思义,是要对配置信息进行核查。所以首先要拿到目标主机的配置信息,如此就必须与远程主机进行通信,一开始选择了两种通信方式:telnet和SSH,后来考虑的安全性,还是选择了SSH。
这样摆在面前的问题是怎么样去实现SSH通信模块?
人生苦短我用python,python中提供了paramiko模块用来创建SSH对象可以与目标主机进行通信,
paramiko
使用如下方法获取对象:
接着使用获取的ssh,与目标主机进行交互
关于python自定义模块的一些问题:
包和模块其实是很类似的东西,如果查看包的类型importSQLAlchemytype(SQLAlchemy),可以看到其实也是<type'module'>。import包的时候查找的路径也是sys.path。
包导入的过程和模块的基本一致,只是导入包的时候会执行此包目录下的__init__.py而不是模块里面的语句了。另外,如果只是单纯的导入包,而包的__init__.py中又没有明确的其他初始化操作,那么此包下面的模块是不会自动导入的。如:
PA
--__init__.py
--wave.py
--PB1
--__init__.py
--pb1_m.py
--PB2
--__init__.py
--pb2_m.py
__init__.py都为空,如果有以下程序:
importsys
importPA.wave#1
importPA.PB1#2
importPA.PB1.pb1_masm1#3
importPA.PB2.pb2_m#4
PA.wave.getName()#5
m1.getName()#6
PA.PB2.pb2_m.getName()#7
当执行#1后,sys.modules会同时存在PA、PA.wave两个模块,此时可以调用PA.wave的任何类或函数了。但不能调用PA.PB1(2)下的任何模块。当前Local中有了PA名字。
当执行#2后,只是将PA.PB1载入内存,sys.modules中会有PA、PA.wave、PA.PB1三个模块,但是PA.PB1下的任何模块都没有自动载入内存,此时如果直接执行PA.PB1.pb1_m.getName()则会出错,因为PA.PB1中并没有pb1_m。当前Local中还是只有PA名字,并没有PA.PB1名字。
当执行#3后,会将PA.PB1下的pb1_m载入内存,sys.modules中会有PA、PA.wave、PA.PB1、PA.PB1.pb1_m四个模块,此时可以执行PA.PB1.pb1_m.getName()了。由于使用了as,当前Local中除了PA名字,另外添加了m1作为PA.PB1.pb1_m的别名。
当执行#4后,会将PA.PB2、PA.PB2.pb2_m载入内存,sys.modules中会有PA、PA.wave、PA.PB1、PA.PB1.pb1_m、PA.PB2、PA.PB2.pb2_m六个模块。当前Local中还是只有PA、m1。
下面的#5,#6,#7都是可以正确运行的。
注意的是:如果PA.PB2.pb2_m想导入PA.PB1.pb1_m、PA.wave是可以直接成功的。最好是采用明确的导入路径,对于./..相对导入路径还是不推荐用。
可参考内容:
http://blog.csdn.net/hyholine/article/details/8581740
Linux公社网站(www.linuxidc.com)原文链接:http://www.linuxidc.com/Linux/2011-07/38078.htm
以下记录一些在开发过程中遇到的问题以及解决办法:
在实现上遇到的一些问题:
配置核查,顾名思义,是要对配置信息进行核查。所以首先要拿到目标主机的配置信息,如此就必须与远程主机进行通信,一开始选择了两种通信方式:telnet和SSH,后来考虑的安全性,还是选择了SSH。
这样摆在面前的问题是怎么样去实现SSH通信模块?
人生苦短我用python,python中提供了paramiko模块用来创建SSH对象可以与目标主机进行通信,
paramiko
使用如下方法获取对象:
defgetMyssh(ip,userName,passWord,Mytimeout=5): try: ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip,22,userName,passWord,timeout=5) except: traceback.print_exc() raise returnssh
接着使用获取的ssh,与目标主机进行交互
myssh=getssh(ip,sshuser,sshpass,port) stdin,stdout,stderr=myssh.exec_command("cat/etc/mysql/my.cnf") out=stdout.readlines()
关于python自定义模块的一些问题:
Package(包)Import
包(Package)可以看成模块的集合,只要一个文件夹下面有个__init__.py文件,那么这个文件夹就可以看做是一个包。包下面的文件夹还可以成为包(子包)。更进一步,多个较小的包可以聚合成一个较大的包,通过包这种结构,方便了类的管理和维护,也方便了用户的使用。比如SQLAlchemy等都是以包的形式发布给用户的。包和模块其实是很类似的东西,如果查看包的类型importSQLAlchemytype(SQLAlchemy),可以看到其实也是<type'module'>。import包的时候查找的路径也是sys.path。
包导入的过程和模块的基本一致,只是导入包的时候会执行此包目录下的__init__.py而不是模块里面的语句了。另外,如果只是单纯的导入包,而包的__init__.py中又没有明确的其他初始化操作,那么此包下面的模块是不会自动导入的。如:
PA
--__init__.py
--wave.py
--PB1
--__init__.py
--pb1_m.py
--PB2
--__init__.py
--pb2_m.py
__init__.py都为空,如果有以下程序:
importsys
importPA.wave#1
importPA.PB1#2
importPA.PB1.pb1_masm1#3
importPA.PB2.pb2_m#4
PA.wave.getName()#5
m1.getName()#6
PA.PB2.pb2_m.getName()#7
当执行#1后,sys.modules会同时存在PA、PA.wave两个模块,此时可以调用PA.wave的任何类或函数了。但不能调用PA.PB1(2)下的任何模块。当前Local中有了PA名字。
当执行#2后,只是将PA.PB1载入内存,sys.modules中会有PA、PA.wave、PA.PB1三个模块,但是PA.PB1下的任何模块都没有自动载入内存,此时如果直接执行PA.PB1.pb1_m.getName()则会出错,因为PA.PB1中并没有pb1_m。当前Local中还是只有PA名字,并没有PA.PB1名字。
当执行#3后,会将PA.PB1下的pb1_m载入内存,sys.modules中会有PA、PA.wave、PA.PB1、PA.PB1.pb1_m四个模块,此时可以执行PA.PB1.pb1_m.getName()了。由于使用了as,当前Local中除了PA名字,另外添加了m1作为PA.PB1.pb1_m的别名。
当执行#4后,会将PA.PB2、PA.PB2.pb2_m载入内存,sys.modules中会有PA、PA.wave、PA.PB1、PA.PB1.pb1_m、PA.PB2、PA.PB2.pb2_m六个模块。当前Local中还是只有PA、m1。
下面的#5,#6,#7都是可以正确运行的。
注意的是:如果PA.PB2.pb2_m想导入PA.PB1.pb1_m、PA.wave是可以直接成功的。最好是采用明确的导入路径,对于./..相对导入路径还是不推荐用。
可参考内容:
Linux公社网站(
相关文章推荐
- Android Dev Tool 国内网站
- 极客编程小挑战#27:生成动态大眼睛的效果
- HDOJ 题目分类
- Python开发入门与实战12-业务逻辑层
- 防止按钮在短时间被连续点击
- NYOJ 79 拦截导弹(dp)
- 卡片动画初体验
- Namp新增脚本 tor-consensus-checker
- 加载本地Html文件
- HDU 1066敌兵布阵
- 在javaScript中关于submit和button的区别介绍
- ZOJ 2770--Burn the Linked Camp 【差分约束】
- windows下bat批处理文件语法
- Hadoop2.2.0--Hadoop Federation、Automatic HA、Yarn完全分布式集群结构
- collections——高性能容器数据类型
- windows下bat批处理文件语法 2015-07-27 11:25 8人阅读 评论(0) 收藏
- LAMP编译安装
- C++操作符重载
- 企业内网安全建设的全面解析
- web app变革之rem