忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: yestreenstars

[其他] 学习与分享——Python自动化运维 [复制链接]

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-11-22 00:32 |显示全部楼层
回复 8# qingduo04

最好能把书名也说一下,方便大家互相学习~
   

论坛徽章:
3
白羊座
日期:2014-08-25 15:04:112014年中国系统架构师大会
日期:2014-10-14 15:59:002015元宵节徽章
日期:2015-03-06 15:52:30
发表于 2014-11-22 09:39 来自手机 |显示全部楼层
正在学习中。…:好想要书,可惜没什么好分享的

求职 : Linux运维
论坛徽章:
3
戌狗
日期:2015-01-11 13:27:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯纪念徽章
日期:2015-05-08 15:03:30
发表于 2014-11-22 15:50 |显示全部楼层
本帖最后由 donalds2008 于 2014-12-03 11:26 编辑

1.你是如何学习Python的?看书?看视频?还是?
主要是通过看电子书,所以希望楼主赏本纸质书拜读拜读😊。看过python学习手册,python cookbook。感觉py自带的手册不错,很系统,可惜没时间翻,用到具体模块时翻翻。

2.你工作中有用到Python吗?主要用来做什么?
主要在网络设备资源管理方面写过一些脚本,py里的pexpect、re、mysqldb等模块功能强大,可以实现设备交互、信息提取、结构化存储等功能,快速支撑业务需求。

3.你觉得Python跟其他脚本语言比优势在哪?
对bash,pl,py略懂,也都写过一些工具。个人感觉,py的优势包括:
1)语法简洁。缩进的编码规则使得编码可读性比较高,辅以必要注释,即使较久的脚本也能短时间内进入当时的编码逻辑,加以优化扩展。虽然好的编码规范也能让写出可读性好的pl脚本,但是在先天性方面显然py更佳,也适合团队协作。
2)代码执行效率较高。与bash比,自然有优势。一般开始时侯,主体功能先用bash写完,如果脚本超过100行或者有效率提升、扩展要求,用py重构,特别是一些通用功能以类方式重新整理。
3)自带模块丰富。pl虽有强大的cpan,但是逐一安装模块较麻烦,py则自带许多模块,能省去不少时间。


4.谈谈Python在自动化运维中的应用。
很多开源工具如ganglia,Hadoop都支持py,因此用处广泛。在自动化运维方面,如监控项扩展、报警通知方式、定制报表等方面,都大有发挥空间。

5.给出一个你自己写的Python脚本(最好有详细注释)。
这是我写的一个ETL模块,比较简单,主要用于分析网络设备交互日志,提取关键数据,并入库。
最后面附有模块测试的代码。
  1. #!/usr/bin/python
  2. """
  3. Script File: port_etl.py                                                               
  4. Description: The file is a etl module, which used to analyse equiment information, and save this into      
  5.              Database.                                                                 
  6. Author: Donalds2008                                                            
  7. Last Update: 2014.5.16                                                                  
  8. """
  9. import re, sys, os
  10. import pexpect, MySQLdb

  11. class port_etl():
  12.              #构造函数
  13.         def __init__(self, log_file, ip_re, port_re, vlan_re):
  14.                 self.log_file  = log_file
  15.                 if not self.check_file( self.log_file ):
  16.                         print( '%s does not exists!!\n' % self.log_file)
  17.                         sys.exit()
  18.                 #导入文件
  19.                 self.raw_file  = os.path.splitext( self.log_file )[0]
  20.                 self.vlan_file = '%s.vlan' % self.raw_file
  21.                
  22.                 #构造正则式
  23.                 self.ip_rx     = re.compile(  ip_re  )
  24.                 self.port_rx   = re.compile( port_re )
  25.                 self.vlan_rx   = re.compile( vlan_re )
  26.              #检查文件是否存在
  27.         def check_file( self, file ):
  28.                 return True if os.path.exists( file ) else False
  29.              #使用正则式匹配,并输出
  30.         def match_write(self):
  31.                 print('matching...')
  32.                 self.vlan_fh      = open( self.vlan_file, 'w' )
  33.                 ( ip, port, vlan) = (None, None, None)
  34.                 for line in open( self.log_file, 'r' ):
  35.                         match = self.ip_rx.search( line )
  36.                         if match != None:
  37.                                 ip = match.group(1)
  38.                         match = self.port_rx.search( line )
  39.                         if match != None:
  40.                                 port = match.group(1).replace(',', ' ')
  41.                         match = self.vlan_rx.search( line )
  42.                         if match != None:
  43.                                 vlan = match.group(1)
  44.                                 self.vlan_fh.write( '%s,%s,%s\n' % ( ip, port, vlan ) )
  45.                 self.vlan_fh.close()
  46.                 print('match finished.')
  47.              #写入数据库
  48.         def db_write(self):
  49.                 host_db= '127.0.0.1'
  50.                 usr_db = 'usr'
  51.                 pwd_db = 'pwd'
  52.                 sel_db = 'mydb'
  53.                 print('loading...')

  54.                 con = MySQLdb.connect( host=host_db, user=usr_db, passwd=pwd_db, db=sel_db)
  55.                 cur = con.cursor()
  56.                 last_ip = None
  57.                 for line in open( self.vlan_file, 'r'):
  58.                         line = line.strip('\n')
  59.                         (ip, port, vlan) = line.split(',')
  60.                         if ip != last_ip:
  61.                                 cur.execute( "delete from t_ip where ip = '%s'" % ip )
  62.                                 last_ip = ip
  63.                         cur.execute( "insert into t_ip values('%s', '%s', '%s')" % (ip, port, vlan) )       
  64.                 con.commit()
  65.                 cur.close()
  66.                 con.close()
  67.                 self.vlan_fh.close()
  68.                 print('load finished.')
  69.         def __del__(self):
  70.                 self.vlan_fh.close()
  71. #模块测试
  72. if __name__ == '__main__':
  73.         etl = port_etl( r'/log/a.txt',\
  74.                         r'Connected to ([\d\.]+)\.', \
  75.                         r'interface xx([\d\/]+)', \
  76.                         r'multipvc .+ vlan (\d+)')
  77.         etl.match_write()
  78.         etl.db_write()
  79.         del etl


复制代码

论坛徽章:
7
2015年中国系统架构师大会
日期:2015-06-26 14:01:38技术图书徽章
日期:2015-12-15 16:42:2715-16赛季CBA联赛之辽宁
日期:2015-12-16 11:01:33shanzhi
日期:2016-06-17 17:59:312017金鸡报晓
日期:2017-01-10 15:19:562017金鸡报晓
日期:2017-02-08 10:39:42
发表于 2014-11-22 19:37 |显示全部楼层
1.你是如何学习Python的?看书?看视频?还是?
    主要是看书(如python核心编程),其次,在实际工作中简单应用,边学边用,遇到问题,去网上找相关解决方式或找朋友讨论。
2.你工作中有用到Python吗?主要用来做什么?
   工作中会用到python,主要数据相关处理方面,项目偶尔会用到,另外,在运维方面会有简单应用。

3.你觉得Python跟其他脚本语言比优势在哪?
  优势有几方面:1,开源,可以免费使用,和产品开发发布没有其他限制。2,代码简洁,简单易用,作为脚本语言,可随意移植。3.可与其他开发语言混合使用,粘接性较强。

4.谈谈Python在自动化运维中的应用。
   python在系统管理上的优势在与强大的开发能力和完整的工具链。python的工程开发能力强大,远强于各种shell和perl。易读易写,兼具面向对象和函数式风格,还有不错元编程能力。通过系统化的将各种管理工具结合,对上述的各类工具进行二次开发,形成统一的服务器管理系统,非常合适运维人员编写一些自动化的软件程序。
  python在服务器管理工具上非常丰富,配置管理(saltstack) 批量执行( fabric, saltstack) 监控(Zenoss, nagios 插件) 虚拟化管理( python-libvirt) 进程管理 (supervisor) 云计算(openstack) ...... 还有大部分系统C库都有python绑定。
对于流程确定的事情,最终一定是纳入系统管理的体系,写成程序,成为系统的一部分。而不是无法复用游离与整体的各种脚本。

5.给出一个你自己写的Python脚本(最好有详细注释)
  
  我曾在异构数据同步项目,数据处理过程中应用到python,

脚本如下:

# -*- coding: utf-8 -*-
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
import cx_Oracle
import pymongo
import sys
v_sdb=sys.argv[1]
v_stable=sys.argv[2]
v_tdb=sys.argv[3]
v_ttable=sys.argv[4]

#connection
Conn_mongo=pymongo.Connection('127.0.0.1',30001)
T_mongo='Conn_mongo.'+v_tdb+'.'+v_ttable
#user
Conn_orcl=cx_Oracle.Connection('data_main/yw_data@yewu_1')
cursor_orcl=Conn_orcl.cursor()

sql_2='select * from '+v_sdb+'.'+v_stable

rs2=cursor_orcl.execute(sql_2)
columns=[item[0] for item in rs2.description]
if eval(T_mongo+'.count()')==0:
    for item in rs2:
        data=dict(zip(columns,item))
        exec(T_mongo+".insert(data)")

cursor_orcl.close()
Conn_orcl.close()
Conn_mongo.close()

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-11-22 20:40 |显示全部楼层
本帖最后由 sohusina 于 2014-11-22 20:54 编辑

1.你是如何学习Python的?看书?看视频?还是?
看书,一本老书。《python核心编程,第二版》。还是python2.6的。

2.你工作中有用到Python吗?主要用来做什么?
没有,只帮别人做着玩玩。

3.你觉得Python跟其他脚本语言比优势在哪?
简单易学,至少跟perl比要简单些。但是优势很明显,既可以搞web编程,还可以搞系统。哎,为什么php,perl当初放弃了其中一条路呢?

4.谈谈Python在自动化运维中的应用。
这几年python很火,应该能实现很多功能吧。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-11-22 20:56 |显示全部楼层
本帖最后由 sohusina 于 2014-11-22 20:58 编辑

5.给出一个你自己写的Python脚本(最好有详细注释)。
把前几天刚学完python教程写的脚本分享一下吧,注:windows下面要把脚本的相应部分的代码缩进
改写一下即可。

可以查看win32和linux redhat 5下的cpu型号,平台是Python2.6+Django1.1.4

1、新建一个django项目,django-admin.py startproject mysite;
2、修改urls.py,加上

urlpatterns = patterns('',
    # Example:
    # (r'^mysite/', include('mysite.foo.urls')),

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
    # to INSTALLED_APPS to enable admin documentation:
    # (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # (r'^admin/', include(admin.site.urls)),
    url(r'^$','mysite.views.look_page'),
)

3、建立一个views.py,代码如下
  1. # -*- coding: utf-8 -*-
  2. import time
  3. import os,sys,platform
  4. from django.http import HttpResponse

  5. def first_page(request):
  6.     return HttpResponse('
  7. Hello World,你好
  8. ')

  9. def look_page(request):
  10.     return HttpResponse('
  11. cpu 型号是: '+ getcpu()+'
  12. ')

  13. def getcpu():
  14.     sysname=platform.system()
  15. # if sysname== 'Windows':
  16. # return getwincpu()
  17. # else:
  18.     return getlinuxcpu()
  19. # return

  20. #def getwincpu():
  21. # import win32com.client
  22. # s=""
  23. # com=win32com.client.Dispatch("WbemScripting.SWbemRefresher")
  24. # obj=win32com.client.GetObject("winmgmts:\\root\cimv2")
  25.            
  26. # processorItems=com.AddEnum(obj,"Win32_Processor").objectSet
  27.                
  28. # com.Refresh()
  29. # for item in processorItems:
  30. # s +=item.Name+"\r\n"
  31. # return s
  32.          

  33. def read_cpu():
  34.     try:
  35.         fd=open("/proc/cpuinfo",'r')
  36.         lines=fd.readlines()
  37.         s=""
  38.         k=0
  39.     finally:
  40.         if fd:
  41.             fd.close()
  42.     for line in lines:
  43.         
  44.         li=line.split(':')
  45.         if len(li) > 2:
  46.             continue
  47.         if li[0].startswith('model name'):
  48.             k+=1
  49.             s+="第"+ str(k) +"个cpu:"+ li[1]
  50.     return s

  51. def getlinuxcpu():
  52.     cpustr=read_cpu()
  53.     if not cpustr:
  54.         return "no cpu info"
  55.     else:
  56.         return cpustr
复制代码
4、进入django下的项目mysite,运行 python manage.py runserver 8000
5、打开浏览器 http://127.0.0.1:8000 即可看到cpu 型号

论坛徽章:
10
CU大牛徽章
日期:2013-05-20 10:44:54数据库技术版块每日发帖之星
日期:2015-06-09 22:20:00IT运维版块每日发帖之星
日期:2015-06-05 22:20:00亥猪
日期:2014-08-23 14:52:27摩羯座
日期:2013-11-29 18:02:31CU十二周年纪念徽章
日期:2013-10-24 15:41:34CU大牛徽章
日期:2013-05-20 10:45:31CU大牛徽章
日期:2013-05-20 10:45:24CU大牛徽章
日期:2013-05-20 10:45:13综合交流区版块每日发帖之星
日期:2016-02-12 06:20:00
发表于 2014-11-22 21:53 |显示全部楼层
回复 1# yestreenstars 这个活动好,必须得顶一下!对于运维人员来说学好一种运维自动化脚本语言在以后的求职中绝对是一大亮点,尤其是像python这种模块化、可移植的语言~


   

论坛徽章:
89
CU大牛徽章
日期:2013-11-29 22:26:36CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2014-02-21 14:22:02CU大牛徽章
日期:2014-02-21 14:22:07CU大牛徽章
日期:2014-02-21 14:22:09CU大牛徽章
日期:2015-02-28 17:45:342015元宵节徽章
日期:2015-03-06 16:56:38羊年新春福章
日期:2015-02-28 17:42:522015七夕节徽章
日期:2015-09-14 09:24:55CU大牛徽章
日期:2014-02-21 14:22:44CU大牛徽章
日期:2015-02-28 17:48:12CU大牛徽章
日期:2015-02-28 17:47:58
发表于 2014-11-23 00:18 |显示全部楼层
星辰开始实习啦,要顶一下!

论坛徽章:
0
发表于 2014-11-23 13:10 |显示全部楼层
http://www.federmanagerquadri.it/fmq/woolrich.asp: I suoi oltre 7 mesi. Cosa posso fare. Come possono confermare che la sua ansia. Chiunque potrebbe farlo a nessuno. Hanno potuto fare questo a me. Vorrei aprire la porta di un agente della DEA.

http://www.fral.it/woolrich.asp: Una volta che si inizia a conoscere l'equipaggio è come avere la tua famiglia prendendo il mickey fuori you.What ti tiene sveglio la notte? Io vivo a Los Angeles così mi preoccupo miei figli non sono così collegati in Gran Bretagna, suppongo che non voglio loro di diventare i bambini americani. Cerchiamo di ottenere indietro tre o quattro volte l'anno. Quando vanno a scuola parlano con un accento americano britannico, ma quando tornano a casa da noi tornano al loro accento inglese, quindi posso fare con that.Do si ottiene detto off per ammorbidire il proprio accento? Sono stato sempre bastone su questo per anni, non è niente di nuovo.

http://www.blitzbovisa.com/shop/feed/woolrichparka.asp: Ho cercato su eBay e altrove per un trench, ma non solo io sono a buon mercato, io sono molto esigente credo quelli allacciati guardano bunchy e quelli non guardano con cintura informe, quindi voglio il genere in cui il nastro si trova proprio in. Si crea un bel look attrezzata. Ho visto questa chiamata cintura inserto sembra avere senso, giusto? Ma, come un termine di ricerca che non salta fuori risultati.

http://www.fsconsult.it/automezzi/woolrich.asp: Mi separai società con il mio medico di 17 anni che ho amato e rispettato. Era stato assolutamente meraviglioso fino ad agosto di allora era quasi come Dr. Jekyll e Mr.

http://www.democentersipe.it/Risorse/master.asp: Sono più facili da usare e rimuovere e l'effetto dura fino al prossimo shampoo. Il vantaggio principale è che assicurano la sicurezza da eventuali danni alla struttura dei capelli e texture. Abbiamo introdotto erbe Mascaras capelli striature per i capelli, per aggiungere glamour, o camuffare i capelli grigi.

论坛徽章:
1
摩羯座
日期:2013-11-29 18:02:31
发表于 2014-11-23 13:43 |显示全部楼层
本帖最后由 CUTianrui007 于 2014-11-26 14:23 编辑

1.你是如何学习Python的?看书?看视频?还是?
看书,这样比较快,看视频太浪费时间了,且视频 讲得都太简单了。
我爱问为什么,很少有视频会讲解为什么。所以看视频也记不住。


2.你工作中有用到Python吗?主要用来做什么?
Python太有用了,几乎天天用,我是做汽车电子软件开发的,

A:软件发布时要用到ROM/RAM统计,我就是写Python脚本实现的。
另外,
B:给客户发布特殊的上位机程序时,也使用Python ctypes调用DLL
函数,控制CANcase(汽车总线监控工具),然后将Python脚本再通过
py2exe转化为单独的Exe文件发给客户,这样客户就可以脱离Python环境运行。

C:工作需要,要给另外一个供应商提供二进制BIN文件,此文件就客户要求有特殊的格式,
要从生成的HEX或ELF文件中提取数据生成BIN文件,我也是用Python实现的。

Python很犀利的。

3.你觉得Python跟其他脚本语言比优势在哪?
以前学过Perl,后来公司来了新人用Python我也跟着用了。
记得特别清楚的一个区别是:Python的字符串可以直接做切片操作,而Perl不行,Perl要将字符串转化为
序列才可以做切片。这一点很让人不舒服。

Perl的安装太麻烦了,也没有好的调试工个。现在我用PyScripter来调试Python,强啊。

另外,Python类库太强大了,可以直接操作WindowsAPI函数,调用DLL,这一点Perl不能比。

Python在网络方面应用极多,语言简单精炼。


4.谈谈Python在自动化运维中的应用。
喜欢上一本书《编程狂人》,本书每周二发布一期,但是每次要手动下载,比较麻烦,就
写了个Python脚本自动从网页丰爬取书。


5.给出一个你自己写的Python脚本(最好有详细注释)。

# -*- coding: utf-8-*-
#此脚本用于提取S19数据,并生成到单独文件中
import os, sys
#定义列表接收处理后的数据
gAllLineList = []
#生成文件
fOut = open("FlashDriver.c","w")
#打开文件
fS19 = open("ReleaseFlashDriver.s19",'r')
#遍历文件每一行
for eachLine in fS19:
    #S19文件格式
    #S3 19 FEDE8000 01 32 20 3E 35 05 A6 39 00 00 E0 39 DA FD 7F 00 20 3E 01 00 12
    #将此行的数据部分存储到列表中
    gAllLineList.append(eachLine[12:-3])

#将列表写入到文件中,并在最后添加\表示换行
for eachItem in gAllLineList:
    fOut.write(eachItem +"\\")
    fOut.write("\n")
#关闭文件
fS19.close()
fOut.close()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP