标签归档:Python

python基础2-安装、基本语法和数据类型

上一篇我们已经介绍完了python的一些语言特性,从这篇开始我们将要进入正式的Python语言学习中了,这篇主要涉及的内容有:

1、python安装

2、python解释器介绍

3、基本语法

4、python的数据类型

1、安装:

我们从安装说起,可能有的小伙伴认为这个太简单了,不需要提了,但因为这是最基础的教程,所以这部分我思来想去还是加上,因为linux本身都已自带Python,所以关于Linux下的安装就不做过多的介绍,后期我们我会专门写一篇关于在linux下的虚拟环境配置,这次主要是windows安装,打开浏览器,输入Python官网地址:https://www.python.org/ 我们将进入如下页面,点击donloads,会出现选版本的界面,截图如下:

install

注意这里有二个版本可供选择,可以根据自己情况选择,在入门基础阶段差别不大,除了print,因为可能大部分小伙伴是做运维的,所以后续脚本类的代码我会选择在centos7系统下运行,centos7默认的是2.7版本,不过大家也不用担心,它们差别没大家想想的大(对运维来说),不要太纠结版本的选择,重要的是尽快学起来,如果在版本上都能纠结个半年,这时间浪费的就太可惜了,下载完成后,双击运行,下一步就可以了,基本上是傻瓜式是安装,但安装好后需要设置环境变量,设置环境变量的截图如下:

201209201707594792

设置完环境变量后,打开cmd窗口,输入python就进入了python交互式解释器中,那安装就到这里了,接下来我们说说python交互解释器的用途。

2、python交互式解释器

在CMD命令行下输入python或在Linux终端下输入python就会进入交换式解释器,使用非常简单

这就是最基本运行环境, 大家可别小瞧了这个解释器的功能,Python之所以容易上手,很大一部分原因我认为是因为有它,尤其我们运维小伙伴最喜欢,因为这个功能跟Linux下shell非常相似,想想我们怎么写shell脚本的,对于一些特别不确定的shell命令,我们会选择在终端运行没问题后在加入shell脚文件中,写python脚本也一样,如果不确定的语句可以在解释器中运行完后确保获得是自己想要的结果,然后在放入我们的代码中,所以它是一个非常好的协助我们调试的工具,我身边写python有超过二年的程序员在调试一些代码时也会选择在解释器下进行,所以后续充分利用好这个工具。

3、python基本语法

3.1

稍微知道python的人都应该知道,Python代码的风格是缩进模式,请看例子:

大家看这段简单的代码,Python代码中没有括号,对于条件语句、循环语句或类语句后要加分号(:),然后下一个语句缩进。,就这一个缩进格式不知道阻挡了多少人想学python确望而却步,这主要是大家从大学学的C语言开始就是带括号的,所以突然不带括号了,会不习惯,尤其我们运维经常写shell脚本,转到python下会发现有很多限制,刚开始会痛苦不堪,但这就是python的风格, 它就是靠缩进来控制类,函数和其它逻辑的刚开始肯定会有一个过程,但你一旦熟悉了,就会发现python写出来的代码是如此简洁,所以在大家刚看开始的写Python的时候,出现错误最多的应该就是:

python缩进错误和缩进方式不一致,那为了避免这个问题,我们就应该统一缩进模式,对于缩进用tab还是空格我看网上也是一个很大的争论,我觉得真没必要,在我们的教程里我建议大家采用4个空格作为统一的缩进格式。

3.2 基本语句和表达式

这部分内容太多,后续我们用在做详细介绍,在这只举几个简单例子,大家熟悉就行,还有就是变量是大小写敏感的。

 

3.2 注释和多行语句

python的注释和多行跟shell脚本一样,这个我就不多说了,在语句前加#就注释,如果语句太长就用\来换行,如下:

四、python数据类型

python的变量类型有以下几种,分别是:

  • boolean    #bool = True
  • integer      #age = 26
  • long         #999999999l, python表达的数值跟机器支持的虚拟内存大小有关
  • float         #pi = 3.14159
  • string      #name = “mingd.cn”
  • list          #[a,b,c,d]
  • Tuple     #(a,b,c,d)
  • Dictionary #{‘a':1, ‘b':2, ‘c':3}

这里边布尔类型最容易理解,True 或False, 关于数字类型我这里就不在多介绍了,在实际编程中运维用的不是太多,如果后续我们遇到了我们单独说,我们重点放到字符串,列表、元组和字典这几个数据类型,这些我们将在下一篇分别重点介绍,请小伙伴持续关注。

python基础1-python语言介绍

从这周起我们正式进入Python基础的学习,那在正式进入学习之前,我们先看下python能沟通做什么,以及学完python我们能干嘛?

python是什么,我们还是直接看度娘好了:

Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件源代码解释器CPython遵循 GPL(GNU General Public License)协议[2]  。
Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中[3]  有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

从这一段中我们可以了解到,第一Python是一个解释型语言,什么是解释型语言呢?简单给大家介绍下,实际上我们用任何一门高级语言写出的程序,机器是无法识别的,因为机器只知道0和1,那怎么能让机器理解我们写的程序呢,这就需要把我们写的程序翻译能机器能理解的语言,那翻译的过程有二种,一种就是解释,一种就是编译,编译就是程序在运行前前把代码编译成机器能运行的文件,例如.exe文件,而解释型就不一样,解释型语言写完就可以运行,不需要编译,它在运行的时候才翻译,那么写到这问题就来了,就是因为解释型语言在执行的时候才翻译,而编译型语言在执行是已经不需要翻译了,所以解释型语言在运行速度会慢,比如Python写的C写的同一个功能,C运行速度要快很多,不过大家也不用担心,这今年随着硬件的提示,它们直接的差别也越来越小,尤其现在的服务器配置动不动就是E5-26XX,32G,运行个脚本根本不是个事儿,当然为提示效率,Python在每次运行也会生成.pyc的文件,这个是python的字节码文件,就是编译后的文件,如果再次运行相同程序,效率会提示很多。

说完python特性,我们再来看看python都能干嘛,简单说啥都能干,也许大家都听说过一句话:人生苦短,我用python.因为Python有大量的模块库,所以它基本能你能想到的它基本都可以做,另外构建新的项目还非常快,在这里其它我不多说了,我还是要讲讲运维,在Python流行之前,我们运维基本采用shell+aws+sed组合来完成自动化运维,在后来随着运维自动化平台的发展,我们都开始研究怎么做自动化平台,但在哪个时候是没有特别合适做运维自动化平台的语言,所以php在那个时候基本成了运维工程师的选择,比如我之前就是写php的,所以如果你看到有用Php实现运维报警的脚本也不必惊讶,我们现在的服务器上老的报警脚本就是Php写的,然后大家都知道了,就是Python来了,有时候我在想,真的要感谢python,因为Python让我们运维可以提升到一个更高的层次,运维具备研发能力,我觉得这才是真正运维的方向,因为不到研发层面,靠之前老模式的运维方式比如每天敲些基本命令和配置搭建某个服务器或者写几个自动化脚本时很难让一个公司的运维水平得到一个质提升的。

最后给大家看一个图,这个是最新的tiobe的编程排行,包括行2016年和2017年的对比,python始终保持在前名,可见Python的流行程度,所以尽快加入学习吧,这篇就到这里,下篇我们开始将Python的基本语法和基本的数据类型。

102243_dhtb_2903254

 

python异常捕获

在Python中处理异常使用的是try-except代码块,try-except代码块放入让python执行的操作,同时告诉python程序如果发生了异常该怎么办,try-except这个功能其实很多入门书籍中都放到了高级篇幅里,在入门的时候一般不会讲这个使用,尤其是作为运维人员,如果你经常写shell,转到python后估计也很少使用这个功能,这功能我觉得说明了shell和python的一个重要区别,因为python是一门真正的编程语言,像其它的编程语言php,java等都会提供异常捕获功能,用这些程序写出的代码是要健壮性的,如果你阅读一些其他人写的程序代码,尤其是一些socket编程方面的代码,很多都是try…except…,有的还except好多个,来判断各种各样的情况,既然这个功能这么有用,我们就来尽快了解下看如何使用的吧。

第一我们先看看它的语法,语法很简单,就是在try-except中放入你想要执行的代码块,例如:、

这是最简单的一种情况,如果情况复杂可以使用多个except句子,例如:

try-except还有更高级的用法,加入else,finally等,今天我们不展开说了有兴趣的可以自己深入研究下。

接下来我们来看一个简单例子,读写文件我们经常的操作,一个常见的问题就是找不到文件,或者文件名称,路径不正确,对这种情况,你就可以采用try-except代码块直观的方式来处理了:

我们再看一个多except的例子,2个数字相减:

以上二个例子就是最简单的try-except的用法了,如果想要保证脚本的健壮性,后续可多用try-except代码块吧,这会让你的代码看起来更专业。

 

 

python脚本pdb调试工具使用

pdb是linux的的python调试工具,它功能比较齐全,使用起来也很方便, 按一边运维工程师的发展来说,一般最早接触的是shell编程, 所以大多是在shell的基础上开始学习Python的,如果是刚 从shell脚本转到写python脚本的小伙伴可能会有点不太适应,比如说调试,大家都知道写脚本是有一个调试过程的除非你的脚本里只有一行, 那既然都有调试过程,那shell下调试就很方便,shell运行时我们可以直接 sh -x  myscript.sh ,就可以看到整个脚本运行的过程,或者在某些关键地方加入echo ,打印出变量,调试方法简单直接, 所以在写Python脚本时我们继承了写shell脚本的调试习惯,我们会在程序中加入print 来调试关键变量,这也是现在大家通用的方法,但有时候就行不通,如果一个脚本写的很长,有涉及到某些逻辑在里面,用print就显得无力了,如果你不掌握调试方法,那完成一个稍微复杂的脚本是相当痛苦的,所以掌握调试工具是写出复杂程序的必备技能,那就引出了今天我们要说的pdb调试工具。

开始前我们先了解下pdb的常用命令:

1、step:单步调试,执行下一行代码,但是有函数调用会进入函数内部。

2、next:执行下一行代码,如果当前语句有函数调用,则不会进入函数体中

3、break:设置程序断点,

4、continue:继续执行程序,直到下一个断点

5、list:显示第几行,例如:list 50

6、print:这个就是打印想看的参数

7、quit:退出

我们拿一个例子看如果具体应用:

比如我调试我之前的脚本:parser_nginx_log.py

我用最简单的方式在终端开始运行:

python -m pdb  parser_nginx_log.py

截图如下:

pdb

 

 

 

调用zabbix API获取主机

zabbix 作为企业级的系统和网络监控方案,对于中小型公司来说基本可以很好的满足对机器的监控需求,因为其部署方便,操作简单深受现在各个互联网公司喜爱,所以现在基本的互联网公司监控用zabbix的非常多,当你安装好zabbix服务端 后,如果启动自动注册功能,在所有客户机安装后会自动在zabbix平台上被监控到,但这里有个问题,如果你机器数量非常少,如果还能数的过来那基本没什么问题,但如果你机器上千台了,这个时候那些机器被监控中,那些没被监控,查起来就没那么方便了,所以日常运维中经常发现的问题就是某台机器故障了但没报警,经查发现这台机器zabbix客户端因为某种原因导致没有被服务端监控到,像这种问题怎么办呢?其实最简单的方案就是从zabbix里获取所有被监控的服务器列表,然后跟运维资产数据库去比对,如果数量一致,那说明监控没漏机器,如果比对不上,就把对不上的IP发出来再报个警就可以了,整体逻辑就是这样,我们今天用zabbix api获取被监控的所有机器列表,代码如下:

 

脚本一共分二部分,第一部分是用户登录,登录后然后获取主机列表,最后写到一个文件里去,所以脚本运行的结果是生成一个所有被监控的IP列表,通过这个列表你就可以去跟你的资产库信息去对比了,还有这个脚本用的requests,所以看起来要清爽很多,代码比较简单,就是二个post就不做太多解释了,今天就到这里,喜欢的小伙伴可以在此基础上修改成合适自己业务的脚本。