zoukankan      html  css  js  c++  java
  • Python运维编程

    Python运维编程

    作者:Danbo  2015-10-11

    什么是Python,为什么要使用Python?

    这个大家自行谷歌,不过看看知乎你就知道Python有多么强大:http://www.zhihu.com/question/25038841  #大蟒蛇是人形自走跑有木有啊!

    首先你要知道Python很强大、Python是一个胶水语言(Glue Language)、与Perl最大的不同是Python开发的哲学是:用一种方法,最好是只有一种方法来做一件事,而Perl是:总是有多种方法来做同一件事。由此来看Perl非常不适合团队开发,不过Oracle的运维管理系统Gird Control却是用Perl写的,还有一个Bug Valid也是用Perl开发的。

    软件工程师利用Python搞开发;
    例如:游戏(主要指网游,经常上传角色、新装备等)、搜索(Google)、嵌入式(一些简单的驱动程序)、网站(豆瓣、 Instagram、v2ex)、CS软件(OpenStack)、Linux下开源的备份软件Bacular等等。

    系统工程师利用Python管理系统;
    例如:脚本......脚本......脚本......(Shell)、运维自动化工具。

    Python上手很简单,非常好用,是一门不会忘记的语言......,可以让你在计算机上做任何事情......

    我们知道以前运维可能不受重视,不过目前运维是越来越受重视了,多亏像新浪、百度、淘宝这样的公司提升了运维的整体水平,做开发的应该知道,你写的代码就是再牛,如果没有好的运维团队的话,也无法支撑像淘宝双十一那么大的访问量,所以目前运维很重要,尤其是懂开发的运维。另一个原因是运维科班出身的真的很少,计算机专业毕业的童鞋多少都有这样的思想:学得好的都去搞开发了,写的不好的才去做运维。这样导致会开发的运维人员不多,所以你懂得!(说到这里又想到了百度二面,面试官当时问我会不会Python,我说不会,然后就没有然后了,/(ㄒoㄒ)/~~,不过大家只要记住:Better later than never!!)

    默认情况下CentOS6.6安装的Python版本为2.6,比较老了,而通过yum升级最新版也是2.6,所以我们通过在Python官网下载最新的2.7.10源码包进行安装,安装完成后我们发现系统默认指向还是2.6,我们要将系统默认的python版本指向2.7.10版本
    [root@localhost ~]# mv /usr/bin/python /usr/bin/python.bak
    [root@localhost ~]# ln -s /usr/local/bin/python2.7 /usr/bin/python
    [root@localhost ~]# python -V
    Python 2.7.10
    OK!搞定

    Let's Python

    国际惯例打印Hello World:
    >>> print 'Hello World'     #一定要使用单引号''
    Hello World

    python可以随便做算术:
    >>> 4*3**2   #类似Shell中的bc或者expr
    36

    Python的编程风格

    语法要求:
    缩进统一:建议大家使用Tab键(默认四个空格)来进行缩进。
    变量:
    -标识符的第一个字符必须是字母或者下划线;
    -标识符可以有字符、数字、下划线组成;
    -标识符大小写敏感。
    Python没有关闭字符(结束符),比如Shell中if的关闭字符是fi,类似的还有do、done等。Python中的关闭符是以缩进完成的。

    运算
    1 + 1 * 3 / 2
    2 ** 32
    A = 14
    B = 12
    A > B、A <= B、A !=B(Python会直接做判断)

    赋值

     

    >>> danbo = 'zhangzhenhui'  #当出现NameError时就表示有变量没有赋值。
    >>> uestc = danbo
    >>> uestc
    'zhangzhenhui'

    Python中引号总结
    ''、""、''' '''的区别
    '':一般用来包一个字符串;
    "":这个是当字符串中含有单引号时,我们就使用双引号来代替;
    ''' ''':当我们给变量赋多行的时候时就需要使用''',当我们使用时虽然输入时是多行,但是其实赋值的时候还是单行。

    >>> danbo = 'fuck haha you
    ... motherfucker'
    >>> danbo
    'fuck haha youmotherfucker'

    >>> danbo = '''fuck haha you
    ... motherfucker'''
    >>> danbo
    'fuck haha you motherfucker'
    >>> print danbo     #我们print之后就会看到多行输出了。
    fuck haha you
    motherfucker

    Python中进行计算是非常方便的,例如:

    >>> age = 22
    >>> next = age + 1
    >>> next
    23

    对比Shell中其计算如下所示:

    [root@localhost ~]# age=22
    [root@localhost ~]# let next=age+1
    [root@localhost ~]# echo $next
    23
    或者:

    [root@localhost ~]# age=18
    [root@localhost ~]# next=`expr $age + 1`
    [root@localhost ~]# echo $next
    19

    导入模块
    什么是模块?
    通俗点说,就是把常用的一些功能单独放置到一个文件中,方便其他文件来调用,这个文件就可以称为一个模块。
    比如当我们想要导入sys模块时,只需要:

    >>> import sys
    >>> sys.path  #列出python寻找的路径,类似shell中的echo $PATH
    ['', '/usr/local/lib/python27.zip', '/usr/local/lib/python2.7', '/usr/local/lib/python2.7/plat-linux2', '/usr/local/lib/python2.7/lib-tk', '/usr/local/lib/python2.7/lib-old', '/usr/local/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages']  #注意第一个为''表示当前目录
    >>>
    如果我们不知道sys模块的作用,我们可以使用help(sys)来查看帮助。
    Python中tab补全默认是没有的,我们可以加进去,我们可以使用脚本,如下:

    vim tab.py
    #!/usr/bin/env python 
    # python startup file 
    import sys
    import readline
    import rlcompleter
    import atexit
    import os
    # tab completion 
    readline.parse_and_bind('tab: complete')
    # history file 
    histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
    try:
        readline.read_history_file(histfile)
    except IOError:
        pass
    atexit.register(readline.write_history_file, histfile)
    del os, histfile, readline, rlcompleter

    在~目录下创建一个名为.pythonstart的文件,然后将上述代码拷贝进入,使用以下命令使其生效:

    echo "export PYTHONSTARTUP=~/.pythonstartup" >> ~/.bashrc
    source /root/.bashrc

    搞定,然后进入python之后就可以使用tab进行补全了。
    我用Debian使用上述方式可以完全搞定,在CentOS平台中提示No module named readline错误,此时我们需要安装readline.tar.gz这个包,之后还要进行一系列的安装,这个请自行谷歌。

    当我们导入某个模块时模块必须处于sys.path所定义的路径中,如果某个模块没有处于定义的目录中,我们必须将其加入到系统路径,方法:sys.path.append('/uestc/python/')不过上述方式比较麻烦,每次退出之后都要重新导入,也可以一劳永逸自动导入,这个后面再说。
    如果我们想从sys模块中导入一个比如path,可以使用:from sys import path。或者使用,导入多个属性:from sys import path, version, try即可。
    其中这个模块:os.system('pwd') #这个模块用来直接调用并执行shell命令。

  • 相关阅读:
    闭包
    保存数据
    Browers Object Model
    JavaScript中的null和undefined
    魔法查询函数
    《黑客与画家》 读书感想
    CakePHP查询数据
    HDFS写入和读取流程
    回调函数
    JAVA中的指针
  • 原文地址:https://www.cnblogs.com/danbo/p/4870100.html
Copyright © 2011-2022 走看看