自动化运维Python系列之基础篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维Python系列之基础篇相关的知识,希望对你有一定的参考价值。

Python介绍

 Python是由创始人吉多·范罗苏姆(Guido van Rossum)在1989年圣诞节假期期间,为了打发时间,构思出来的一个新的脚本解释器。由于Guido在开发Python语言过程中,借鉴了很多ABC语言特性,所有后来包括Guido自己也那么认为,Python语言的前身就是ABC语言。

 Python是一门面向对象的、动态解释型强定义语言;Python崇尚简洁、优美、清晰,是一门优秀的被广泛使用的语言。

 在2015年以前,最流行的Python版本还是2.4,但是由于Python官方在2008年发布了3.0,一是款完全不同的Python版本,不兼容包括2.4在内以前的的任何版本,这就影响了3.0的推行,才出了一个既可以兼容2.4又支持很多3.0新特性的2.6版本。官方还开发了专门的帮助将2.x转为3.0版本的转换工具,因此,python3.0的使用才开始逐渐多了起来。

  

Python应用领域

云计算:Openstack

自动化:Saltstack、Ansible

系统运维:运维人员必会的语言

图形:PyQT, WxPython,TkInte

Web开发:众多大型网站都是基于Python开发,如Youtube 典型的Web框架有Django

科学运算:人工智能如AlphaGo、典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas

金融行业:在金融工程领域,作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测

  

Python特点

优点

1)Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

2)开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。

3)高级语言:当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

4)可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行

5)可扩展性:如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

6)可嵌入性:你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

缺点

1)速度慢:由于天生就是一门解释型语言,Python和C、JAVA对比的话,运行速度是会慢很多,适合对一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序;不适合对速度要求极高的搜索引擎等程序。

2)代码不能加密:如果你的项目源代码要求加密,那么不适合用Python开发

3)线程不能利用多CPU:这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行

   

Python的安装

1)windows

官方网站提供了默认的下载渠道:https://www.python.org 

技术分享

截止到现在,最多的还是3.5版本,不过要注意区分平台:Windows、Mac、Linux

建议同时下载安装两个版本,分别放在C:\Python2.7和C:\Python3.5, 方便对一些程序特性做测试

注意修改环境变量:

右键计算机-->属性-->高级系统设置-->环境变量-->找到变量名为Path的一行双击-->Python安装目录追加到变量值中,用分号;分割。

  

2)Linux

Linux Centos 7 中是将Python作为默认软件安装的,只不过具体OS版本不同

[[email protected] ~]# python
python     python2    python2.7 #centos7中默认为2.7版本

我们只需要下载并安装3.5版本就可以了,下载地址:https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz

tar xf Python-3.5.2.tar.xz
cd Python-3.5.2/
./configure
make && make install

修改系统默认的Python版本

[[email protected] Python-3.5.2]# mv /usr/bin/python /usr/bin/python2.ori
[[email protected] Python-3.5.2]# ln -s /usr/local/bin/python3.5 /usr/bin/python

为了防止修改完Python版本后yum出问题,需修改yum

vim /usr/bin/yum
#!/usr/bin/python  #修改为/usr/bin/python2.ori

 

3)Mac

直接下载运行即可

Max Os X 10.5:https://www.python.org/ftp/python/3.5.2/python-3.5.2-macosx10.5.pkg

Max Os X 10.6:https://www.python.org/ftp/python/3.5.2/python-3.5.2-macosx10.6.pkg

lichengbing:~ lichengbing.cn$ python3
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

  

Python开发环境【Pycharm】

For Windows下载地址:http://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC

  技术分享

Python快速入门

1)我的第一个Python程序“Hello World!”

[[email protected] ~]# vim hello.py
#!/usr/bin/env python
print("Hello World!")
[[email protected] ~]# ./hello.py # .执行文件需要给文件添加x权限
Hello World

  

2)变量和字符编码

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascillASCII(American Standard Code for InformationInterchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。 

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode Unicode(万国码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536. 

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)

#!/usr/bin/env python #设置脚本系统环境变量
 # -*- coding:utf-8 -*- #Python3.0版以上默认字符集为UTF-8,可以支持中文显示
 name = "lichengbing"
 age = 21
 
 print(name,age)

   

3)注释

‘‘‘  
name = "lichengbing" # This is a variable 
age = 21 print(name,age) 
‘‘‘
#注释最好不超过80个字符

   

4)用户输入

C:\Users\lilongzi>python2
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> user_name = raw_input("you name:")
you name:lichengbing
>>> print(user_name)
lichengbing

格式化用户输入

name = input("input you name:")
age = int(input("input you age:"))
job = input("input you job:")
msg = ‘‘‘
Infomation of user name:%s:
--------------
Name:  %s
Age:   %d
Job:   %s
------END-----
‘‘‘ % (name,name,age,job)
print(msg)

执行结果

input you name:lichengbing
input you age:25
input you job:ENGINEER
Infomation of user name:lichengbing:
--------------
Name:  lichengbing
Age:   25
Job:   ENGINEER
------END-----

用户输入密码隐藏

import getpass
username = input("uesrname:")
password = getpass.getpass("password:")
print(username,password)
#只支持在Linux环境下用Python3执行

  

5)初识模块

调用系统命令

[[email protected] ~]# python
Python 2.7.5 (default, Nov 20 2015, 02:00:19)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system("df -h")
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       9.0G  5.1G  4.0G  56% /
devtmpfs        480M     0  480M   0% /dev
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           489M   19M  470M   4% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1       253M  111M  143M  44% /boot
tmpfs            98M     0   98M   0% /run/user/0
0

保存调用的命令并定义为变量

>>> cmd_res = os.popen("df -h").read()
>>> print(cmd_res)
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       9.0G  5.1G  4.0G  56% /
devtmpfs        480M     0  480M   0% /dev
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           489M   20M  470M   4% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1       253M  111M  143M  44% /boot
tmpfs            98M     0   98M   0% /run/user/0

Python全局环境变量

>>> import sys
>>> print(sys.path)
[‘‘, ‘/usr/lib64/python27.zip‘, ‘/usr/lib64/python2.7‘, ‘/usr/lib64/python2.7/plat-linux2‘, ‘/usr/lib64/python2.7/lib-tk‘, ‘/usr/lib64/python2.7/lib-old‘, ‘/usr/lib64/python2.7/lib-dynload‘, ‘/usr/lib64/python2.7/site-packages‘, ‘/usr/lib64/python2.7/site-packages/gtk-2.0‘, ‘/usr/lib/python2.7/site-packages‘]

将tab.py放入环境变量中,Python在导入os等模块后能自动补全命令

[[email protected] site-packages]# pwd
/usr/lib64/python2.7/site-packages
#!/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

查看自动补全

>>> import tab
>>> import os
>>> os.
Display all 249 possibilities? (y or n)
os.EX_CANTCREAT             os.__package__              os.listdir(
os.EX_CONFIG                os.__reduce__(              os.lseek(

 

6)if条件判断

if判断

age = 22
guess_number = int(input("input you guess number:"))
if guess_number == age :
    print("Congratulations!")
elif guess_number < age :
    print("Think smaller...")
else :
print("Think larger...")

跳出循环

age = 22
for i in range(10):
    guess_number = int(input("input you guess number:"))
    if guess_number == age :
        print("Congratulations!")
        break
    elif guess_number < age :
        print("Think smaller...")
    else :
        print("Think larger...")

简单的猜数字游戏

age = 22
counter = 0
for i in range(10):
    if counter <3:
        guess_number = int(input("input you guess number:"))
        if guess_number == age :
            print("Congratulations!")
            break
        elif guess_number < age :
            print("Think smaller...")
        else :
            print("Think larger...")
    else:
        #print("Too namy attempts...bye!")
        #break
        continue_confirm = input("Do you want to continue guess? Y or N: ")
        if continue_confirm == ‘Y‘:
            counter = 0
            continue
        else:
            print("bye...")
            break
    counter += 1
input you guess number:21
Think smaller...
input you guess number:25
Think larger...
input you guess number:1
Think smaller...
Do you want to continue guess? Y or N: Y
input you guess number:

 

本文出自 “改变从每一天开始” 博客,请务必保留此出处http://lilongzi.blog.51cto.com/5519072/1846966

以上是关于自动化运维Python系列之基础篇的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维Python系列之基础函数和文件操作

Python自动化运维之路Day8基础篇之面向对象下篇

自动化运维Python系列之基础数据类型

Python 自动化运维3-基础篇

自动化运维Python系列之常用模块

自动化运维Python系列之面向对象