Python 运维

1.python解释器提供提供的小工具html

1.1 一秒钟启动一个下载服务器
  进入要下载文件的目录(shift+鼠标右键能够很快的在当前目录打开一个cmd)
  python2:  python2 -m SimpleHTTPServer   (python2中的模块,在python3中已经整合到http.server模块中)
  python3:  python -m http.server
  
  其原理是打开了一个python中内置的web服务器,相似于FTP,默认端口为8000,若是存在index.html则会打开此文件,若是不存在则显示当前目录下的文件列表

1.2 快速转化json字符串为json对象(linux系统中)
  $ echo '{"links":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"}]}' | python -m json.tool

1.3 检查第三方库是否正确安装
   使用import paramiko
   批量检查:python -c "import paramiko"

2.python中pip高级用法python

2.1 pip介绍
  pip是最流行的包管理工具。
    pip功能强大,支持安装和卸载,期对手easy_install则只支持安装,pip能够很好的支持虚拟环境,能够经过requirements.txt集中管理依赖,可以处理二进制格式(.whl),pip是先下载后安装,若是安装失败,也会清理干净
  python2中是pip,python3中是pip3
2.2 pip经常使用命令
  升级
    pip install -U pip
  查找安装包
    pip search paramiko
  安装特定版本的包
    pip install paramiko==0.2.8
  删除安装包
    pip uninstall paramiko
  查看安装包信息
    pip show paramiko
  查看安装包的依赖是否完整
    pip check paramiko
  查看已安装包的列表
    pip list
  处处系统已安装包的列表到requirements文件 能够到其余服务器上直接安装软件
    pip freeze > d:\requirements.txt
  从requirements文件中安装
    pip install -r requirements.txt
  使用pip补全
    pip completion --bash >> ~/.profile
    $source ~/.profile

2.3 pip加速安装技巧
  pip的下载地址是在pypi.python.org,有点饿时候特别慢,也不稳定,若是要使用国内第三方的源,就能提升下载速度,只须要在下载的时候添加-i参数便可
    pip install -i http://pypi.douban.com/simple/ paramiko

  也能够将软件下载到本地部署,经过这中下载会将软件的全部依赖包也下载到本地(离线下载的时二进制包)
    pip install --download=="test" -r requirements.txt 从requirements.txt中下载包到test下
  本地安装
    pip install --no-index -f(-find-links) file://'test' -r requirements.txt
  
     

 3.python的工做环境linux

pyenv:用于管理不一样的python的版本
virtualenv:用于管理不一样的工做环境

4.python os,sys模块(跨平台)git

 判断一个文件是否存在,若是不存在,则提示,若是存在,则判断文件是否可读github

import sys                                           #导入模块
import os
def test():
    sys.argv.append(" ")                              #向argv列表中添加一个空元素,若是在执行时忘记添加参数,而又没有第一个元素的话,程序会报错
    filename = sys.argv[1]                           #将argv中的下标为1的元素赋值给filename
    if not os.path.isfile(filename):                 #经过os模块中path子模块中的isfile判断文件是否存在
        raise SystemExit(filename + '  不存在哦')     #若是不存在,则打印文件不存在
    elif not os.access(filename,os.R_OK):            #若是存在的话则经过os模块的access子模块判断是否可读
        raise SystemExit(filename + '  不能够读写')    #若是可读,则打印危机爱你能够读写
    else:
        print (filename + '  能够读写')
if __name__ == '__main__': test()

执行结果
E:\python 20>python json.py json.py
  ['json.py', 'json.py'] #是打印argv列表元素
  json.py 能够读写

sys.argv:是sys库下面的列表,该列表保存了全部的命令行参数,其中下标为0的元素是执行文件的名字,其他的参数已字符串的形式保存在该列表中
      此列表能够从终端接收无数个参数,而存放在列表当中,若是没有第一个参数的话,程序会报错,而没法执行,因此在argv中添加一个空元素,当
python json.py test.txt有参数的时候,test.txt就成了argv的第一个元素
os.path.isfile(filename):判断文件是否存在
os.access(path,mode):判断文件是否可读
raise:python中的异常处理,当程序出现错误,python会自动引起异常,也能够经过raise显示地引起异常。一旦执行了raise语句,raise后面的语句将不能执行

 python使用stdin和fileinput读取标准输入web

从所周知,shell脚本有一个全部语言都没有的有点,那就是管道,经过管道符,咱们可使用多个简单的命令来实现一个复杂的功能。
所以,咱们但愿在Python中使用管道来结合Python语言和shell语言的优点(经过管道来将shell语言和Python语言一块儿使用

在Python标准库sys中有三个文件描述符分别是:stdin(标准输入 0,指的是经过<或者|来传递数据),stdout(标准输出 1),stderr(标准错误 2)。经过标准输入结合管道,就不须要经过open()函数来打开文件了。

1.使用sys库中的stdin读取内容(linux中的标准输入)
  windows
  建立 tes_sys_stdin.py文件
     import sys
     name = sys.stdin.readline()
     print (name)

  linux:

  建立 test_sys_stdin.py文件
    import sys
    for line in sys.stdin():
    print (line)
    执行test_sys_stdin.py文件:
      cat /etc/passwd | python test_sys_stdin.py
      python test_sys_stdin.py < /etc/passwd
  也能够经过stdin.readlines()函数将标准输入的内容读取到一个列表里面

   sys.stdin.readline( )会将标准输入所有获取,包括末尾的'\n',所以用len计算长度时是把换行符'\n'算进去了的,可是input( )获取输入时返回的结果是不包含末尾的换行符'\n'的。
   所以若是在平时使用sys.stdin.readline( )获取输入的话,不要忘了去掉末尾的换行符.
   能够用strip( )函数(sys.stdin.readline( ).strip('\n'))或sys.stdin.readline( )[:-1]这两种方法去掉换行。shell

2.使用fileinput标准库读取内容(普通的读取文件)
  fileinput()能够进行多文件的处理,使用fileinput能够读取命令行给出的多个文件,也就是说fileinput会便利argv[1:]列表,并按行一次读取列表中的文件,若是该列表为空,则fileinput默认读取标准输入的内容
  建立sys_fileinput.py文件

  windows:
    import fileinput
    for line in fileinput.input(files=('123','456')): #读取文件
      print(line)
  linux:
    import fileinput
    for line in fielinput.input():
      print (line)
    执行方法:
      cat /etc/passwd |python sys_fileinput.py
      python sys_fileinput.py /etc/passwd
      python sys_fileinput.py /etc/passwd /etc/hosts
  
fileinput()方法:
    print (fileinput.filename()) #当前正在读取的文件名
    print (fileinput.fileno()) #文件描述符
    print (fileinput.filelineno()) #正在读取的行是当前文件的第几行
    print (fileinput.isfirstline()) #正在读取的行是不是当前文件的第一行
    print (fileinput.isstdin()) #正在读取文件仍是直接从标准输入中读取内容

3.使用stdout和stderr向标准输出和标准错误中输入信息
  import os
  sys.stdout.write("标准输出") 等价于 print('标准输出')
  sys.stderr.write("标准错误")

  在python中调用print时,事实上调用了sys.stdout.write(obj+'\n')
  print 将须要的内容打印到控制台,而后追加一个换行符。数据库

 5.使用getpass读取密码编程

import getpass
user = getpass.getuser()                     #linux/windows获取到的用户都是当前用户
passwd = getpass.getpass('your password:')   #用户输入的密码不在控制台上显示,可是pycharm有个小bug,不能实现这个函数
print (user,passwd)

6.python管理Linux系统(os,sys标准库进阶,跨平台)json

在管理Linux系统不少状况下就是在对文件进行管理,这是由于UNIX及其衍生物Linux中:一切都被看做是文件!!
如:普通文件,硬盘,sockect接口,连接符号,命名管道,甚至目录都被当作是一个文件,档把全部东西都当作是文件之后,一个显著的优势就是:能够在输入和输出资源上使用同一组Linux工具,程序和Api。

1.文件读写
    文件能够从多个维度进行管理:文件重命名,获取文件属性,判断文件是否存在,备份文件,读写文件,打包解压等等。
    在python读取文件只须要经过内置函数open来打开文件便可,open函数接受文件名称和打开模式做为参数,返回一个文件对象,操做完文件以后,经过文件对象的close方法关闭便可
    info = open('456',encoding='utf-8') #要加上编码方式,读取到info文件对象里面
    print(info.read()) #经过info文件对象的read方法读取文件的全部内容,并打印
    info.close() #关闭这个文件对象
    
    open函数默认以"r"的方式打开,也能够知道那个文件的打开模式
      r:默认以读的方式打开,若是文件不存在,抛出FileFoundError异常
      w:以写模式打开,若是文件非空,则已有的内容将会被覆盖,若是文件不存在,将建立文件并写入
      a:在文件末尾追加数据的方式写入
      x:建立一个新文件,若是文件存在,则抛出FileExisError异常
      r+:可读写文件。可读;可写;可追加
      w+:写读
      U:表示在读取时,能够将\r\n自动转换成 \n (与 r 或 r+ 模式同使用, rU或者r+U)
      b:表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
    
    open函数的其余方法
      info.close() #关闭文件
      info.flush() #刷新缓冲区,将缓冲区的数据当即写入到文件
      info.isatty() #判断文件是否链接到终端设备,返回bool值
      info.read(10) #读取文件前10个字符,从文件中读取指定的字符数,默认读取所有
      info.readline(3)) #读取前3个字符,默认每次最多读取一行数据,每行的最后包含换行符'\n'
      info.readlines() #将文件存入到列表中,列表中的么一行就是文件中的每一行
      info.readable #判断文件是否可读,返回布尔值
      info.seek(3) #移动文件读取的指针,若是文件中包含中文,移动指针必须是3的倍数,否则会报错,由于一个中文字符等于3个字节
      info.seekable #判断文件指针是否可用,返回布尔值
      info.tell() #获取指针位置
      info.truncate() #截断,把指针后面的内容删除,并写入文件,要在可写模式下操做
        f = open('text.txt','r+',encoding='utf-8')
        f.seek(9) #把指针移动到第9个字节后面(即第3个中文后面)
        f.truncate() #把第3个中文后面的字符删除,并写入文件
        f.close()
      info.writable() #判断文件是否可写,返回布尔值
      info.write() #把字符串写入文件,并返回字符数
      info.writelines() #写一个字符串列表到文件    

    在计算机中,每打开一个文件就须要占用一个文件句柄,而一个进程拥有的文件句柄是有限的,而且文件句柄也会占用操做系统的资源,因此,在打开文件之后要及时关闭文件,避免文件句柄泄露
      1.可使用finally关闭文件句柄,而且在什么状况是都会关闭(可是不提倡,由于python提倡优美,简洁)
        try:
          info = open("test.txt",encoding='utf-8')
          peint(info)
        finally:
          info.close()
      2.使用上下文管理器(会打开文件,而后自动关闭,不用close函数)
        with open('data.txt',encoding='utf-8') as info:
          print(info.read())

    如何读取大文件?
       使用上下文管理器和for循环,由于for循环不只能够遍历如字符串,列表,元祖等可迭代序列,还可使用可迭代协议来便利迭代对象,文件对象就实现了可迭代协议
        with open('data',encoding='utf-8') as info:
          for line in info:
            print(line.upper())

    使用print语句也能够将数据写入到文件
      with open ("456","a+",encoding="utf-8") as info:
        print(1,2,'hello,world',sep='\n',file=info)

 2.文件与文件路径管理
   
 python标准库中的os模块对操做系统的api进行了封装,而且使用同一个api接口来管理不一样的操做系统的相同功能。
    os模块包含与操做系统的系统环境,系统变量,系统文件,用户数据库以及权限进行交换的函数
    2.1 os模块
      os模块中包含两个比较经常使用的函数
        os.getcwd() #获取当前绝对路径
        os.listdir() #列出当前目录下的文件和文件夹
    2.2 os.path详解
(用来对文件和文件路径进行管理)
      拆分路径
        os.path.split()   #返回一个二元组,包含文件路径和文件名
        os.path.dirname() #返回文件的路径
        os.path.basename() #返回文件名
        os.path.splitext() #返回一个去处扩展名部分和扩展名的二元组
          
import os
          path = "/root/p0st/h/error.log"
          print(os.path.split(path)) --->('/root/p0st/h', 'error.log')
          print(os.path.dirname(path)) --->/root/p0st/h
          print(os.path.basename(path)) --->error.log
          print(os.path.splitext(path)) --->('/root/p0st/h/error', '.log')
      构建路径
     
   os.path.expanduser('~')#返回当前输入用户的家目录,必须得加~或~adm等指定用户
        os.path.abspath() #返回文件或路径的绝对路径
        os.path.path() #根据不一样的操做系统,使用不一样的路径分隔符拼接路径
          import os
          print(os.path.expanduser('~adm')) --->/var/adm
          print(os.path.abspath('456')) --->E:\oldboy\python 20\456
          print(os.path.join(os.path.expanduser('~'),'123','456.txt')) --->/var/adm/123/456.txt

        判断一个路径是否为绝对路径
          import os
          os.path.isabs(os.path.join(os.path.expanduser('~adm'),'123','456.txt')) --->True

        查看当前文件名字须要使用__file__这个特殊变量:当前代码所在的源文件
          import os
          path = os.path.abspath(__file__)
          print(path) --->/var/adm/123/456.py
          print(os.path.abspath(os.path.join(os.path.dirname(path),os.path.pardir))) -->/var
        获取文件属性和判断文件类型
          
import os
          path= os.path.abspath(__file__)
          print(os.path.getatime(path)) #获取当前文件的访问时间
          print(os.path.getctime(path)) #获取当前文件的建立时间
          print(os.path.getmtime(path)) #获取当前文件的修改时间
          print(os.path.getsize(path)) #获取当前文件的大小
          print(os.path.exists(path))              #判断当前路径是否存在
          print(os.path.isfile(path)) #参数所指的路径存在,而且是一个文件
          print(os.path.isdir(path)) #参数所所指的路径存在,而且是一个目录
          print(os.path.islink(path)) #。。。。。。。而且是一个连接
          print(os.path.ismount(path)) #。。。。。。。而且是一个挂载点

        使用os模块管理文件和目录
          os.remove(path)/unlink(path): 删除path所指的文件
          os.rmdir(path)/removedirs(path) : 删除path所指向的目录,该文件夹必须为空,不然报错。
          os.mkdir(path):建立一个文件夹
          os.rename('olddir','newdir'):修改一个文件夹的名字
        
        使用os模块来修改和判断文件权限
          os.chmod(filename,0777) #修改文件权限
          os.access(filename,os.R_OK)#判断文件权限---> os.R_OK:是否可读, os.W_OK:是否可写, os.X_OK:是否可执行
          
        
"""
经过命令行读取文件名称,若是文件存在,则查看是否能执行,不能的话修改权限为777,若是可执行的话就打印输出文件内容,若是文件不在,则提示文不存在
"""
# _*_ encoding:utf-8 _*_
import os
import sys

sys.argv.append('')
file_name = sys.argv[1]
def read_file():
    if not os.path.isfile(file_name):
        raise SystemExit(file_name + " 文件不存在")
    elif os.access(file_name,os.X_OK):
        with open(file_name) as info:
            print(info.read())
    else:
        os.chmod(file_name,0777)
        print("已修改成0777")    
if __name__ == '__main__':
    read_file()
列子一
"""
打印最经常使用的十条linux命令
"""
#_*_ encoding:utf-8 _*_
import os
from collections import Counter

c = Counter()
with open(os.path.expanduser('~/.bash_history')) as cmd_info:
for line in cmd_info:
cmd = line.strip().split()
if cmd:
c[cmd[0]]+=1
print(c.most_common(10))
列子二

 7.python运维经常使用模块

一、psutil是一个跨平台库(https://github.com/giampaolo/psutil)
可以实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,分析和系统资源及进程的管理。

二、IPy(http://github.com/haypo/python-ipy),辅助IP规划。

三、dnspython(http://dnspython.org)Python实现的一个DNS工具包。

4、difflib:difflib做为Python的标准模块,无需安装,做用是对比文本之间的差别。

5、filecmp:系统自带,能够实现文件,目录,遍历子目录的差别,对比功能。

6、smtplib:发送电子邮件模块

七、pycurl(http://pycurl.sourceforge.net)是一个用C语言写的libcurl Python实现,功能强大,支持的协议有:FTP,HTTP,HTTPS,TELNET等,能够理解为Linux下curl命令功能的Python封装。(PS:PycURL在前几天的文章里有说起过)

8、XlsxWriter:操做Excel工做表的文字,数字,公式,图表等。

9、rrdtool:用于跟踪对象的变化,生成这些变化的走走势图

十、scapy(http://www.wecdev.org/projects/scapy/)是一个强大的交互式数据包处理程序,它可以对数据包进行伪造或解包,包括发送数据包,包嗅探,应答和反馈等功能。

11、Clam Antivirus免费开放源代码防毒软件,pyClamad,可让Python模块直接使用ClamAV病毒扫描守护进程calmd。

12、pexpect:能够理解成Linux下expect的Python封装,经过pexpect咱们能够实现对ssh,ftp,passwd,telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的。

1三、paramiko是基于Python实现的SSH2远程安装链接,支持认证及密钥方式。能够实现远程命令执行,文件传输,中间SSH代理等功能。相对于Pexpect,封装的层次更高,更贴近SSH协议的功能,官网地址:http://paramiko.org(依赖:Crypto,Ecdsa,Python开发包python-devel)

1四、fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操做组件,能够实现本地或远程shell命令,包括命令执行,文件上传,下载及完整执行日志输出等功能。Fabric在paramiko的基础上作了更高一层的封装,操做起来更加简单。官网地址:http://www.fabfile.org(依赖setuptools,Crypto,paramiko包支持)

15、CGIHTTPRequestHandler实现对CGI的支持。

1六、ansible(http://www.ansibleworks.com/)一种集成IT系统的配置管理,应用部署,执行特定任务的开源平台。基于Python实现,由Paramiko和PyYAML两个关键模块构建。Ansibl与Saltstack最大的区别是Ansible无需在被控主机上部署任何客户端,默认直接经过SSH通道进行远程命令执行或下发功能。

17、YAML:是一种用来表达数据序列的编程语言。

18、playbook:一个很是简单的配置管理和多主机部署系统。

1九、saltstack(http://saltstack.com)是一个服务器基础架构集中化管理平台,通常能够理解为简化版的puppet和增强版的func。Saltstack基于Python语言实现,结合轻量级消息队列ZeroMQ,与Python每三方模块(Pyzmq,PyCrypto,Pyjinja2,python-msgpack和PyYAML等)构建。

20、func,为解决集群管理,监控问题需设计开发的系统管理基础框架。
View Code

 8.python分布式框架

Celery - 分布式任务队列

 

 

 

 

 

web

相关文章
相关标签/搜索