Python 运维
1.python解释器提供提供的小工具
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高级用法
2.1 pip介绍 pip是最流行的包管理工具。 pip功能强大,支持安装和卸载,期对手easy_install则只支持安装,pip可以很好的支持虚拟环境,可以通过requirements.txt集中管理依赖,能够处理二进制格式(.whl),pip是先下载后安装,如果安装失败,也会清理干净 python2中是pip,python3中是pip32.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的工作环境
pyenv:用于管理不同的python的版本 virtualenv:用于管理不同的工作环境
4.python os,sys模块(跨平台)
判断一个文件是否存在,如果不存在,则提示,如果存在,则判断文件是否可读
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读取标准输入
从所周知,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]这两种方法去掉换行。
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标准库进阶,跨平台)
在管理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运维常用模块
1、psutil是一个跨平台库(https://github.com/giampaolo/psutil) 能够实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,分析和系统资源及进程的管理。 2、IPy(http://github.com/haypo/python-ipy),辅助IP规划。 3、dnspython(http://dnspython.org)Python实现的一个DNS工具包。 4、difflib:difflib作为Python的标准模块,无需安装,作用是对比文本之间的差异。 5、filecmp:系统自带,可以实现文件,目录,遍历子目录的差异,对比功能。 6、smtplib:发送电子邮件模块 7、pycurl(http://pycurl.sourceforge.net)是一个用C语言写的libcurl Python实现,功能强大,支持的协议有:FTP,HTTP,HTTPS,TELNET等,可以理解为Linux下curl命令功能的Python封装。(PS:PycURL在前几天的文章里有提及过) 8、XlsxWriter:操作Excel工作表的文字,数字,公式,图表等。 9、rrdtool:用于跟踪对象的变化,生成这些变化的走走势图 10、scapy(http://www.wecdev.org/projects/scapy/)是一个强大的交互式数据包处理程序,它能够对数据包进行伪造或解包,包括发送数据包,包嗅探,应答和反馈等功能。 11、Clam Antivirus免费开放源代码防毒软件,pyClamad,可以让Python模块直接使用ClamAV病毒扫描守护进程calmd。 12、pexpect:可以理解成Linux下expect的Python封装,通过pexpect我们可以实现对ssh,ftp,passwd,telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的。 13、paramiko是基于Python实现的SSH2远程安装连接,支持认证及密钥方式。可以实现远程命令执行,文件传输,中间SSH代理等功能。相对于Pexpect,封装的层次更高,更贴近SSH协议的功能,官网地址:http://paramiko.org(依赖:Crypto,Ecdsa,Python开发包python-devel) 14、fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括命令执行,文件上传,下载及完整执行日志输出等功能。Fabric在paramiko的基础上做了更高一层的封装,操作起来更加简单。官网地址:http://www.fabfile.org(依赖setuptools,Crypto,paramiko包支持) 15、CGIHTTPRequestHandler实现对CGI的支持。 16、ansible(http://www.ansibleworks.com/)一种集成IT系统的配置管理,应用部署,执行特定任务的开源平台。基于Python实现,由Paramiko和PyYAML两个关键模块构建。Ansibl与Saltstack最大的区别是Ansible无需在被控主机上部署任何客户端,默认直接通过SSH通道进行远程命令执行或下发功能。 17、YAML:是一种用来表达数据序列的编程语言。 18、playbook:一个非常简单的配置管理和多主机部署系统。 19、saltstack(http://saltstack.com)是一个服务器基础架构集中化管理平台,一般可以理解为简化版的puppet和加强版的func。Saltstack基于Python语言实现,结合轻量级消息队列ZeroMQ,与Python每三方模块(Pyzmq,PyCrypto,Pyjinja2,python-msgpack和PyYAML等)构建。 20、func,为解决集群管理,监控问题需设计开发的系统管理基础框架。
8.python分布式框架
Celery - 分布式任务队列
web
Python 运维的更多相关文章
- 【福吧资源网整理】老男孩-python运维6期 不加密
老男孩-python运维6期 不加密,连夜整理出来分享给大家老男孩的python教程确实不错. 教程目录: 下载地址:http://www.fu83.cn/thread-204-1-1.html
- Python运维开发基础10-函数基础【转】
一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...
- Python运维开发基础09-函数基础【转】
上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...
- Python运维开发基础08-文件基础【转】
一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...
- Python运维开发基础07-文件基础【转】
一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...
- Python运维开发基础06-语法基础【转】
上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...
- Python运维开发基础05-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- Python运维开发基础03-语法基础 【转】
上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...
- Python运维开发基础02-语法基础【转】
上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...
随机推荐
- SQL 对结果集进行分组排序过滤重复数据
简单的表操作: select row_number() over(partition by A.gid order by A.gid ) as RowN, A.* from Fit_Order A 关 ...
- 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库02 ——使用ambari-server安装HDP
本文记录使用ambari-server安装HDP的过程,对比于使用cloudera-manager安装CDH,不得不说ambari的易用性差的比较多~_~,需要用户介入的过程较多,或者说可定制性更高. ...
- python rabbitmq的库,rabbitpy代替pika
之前看网上都是清一色pika包的例子,就用的pika包,最大问题是非多线程安全,改为使用rabbitpy.大幅改善了pika多线程需要加锁,和外网推送延迟又不能开多线程导致推送慢的问题. rabbit ...
- C# SQLite数据库
在客户端配置文件<configuration>节点下,添加: <connectionStrings> <add name="localdb" conn ...
- MySQL 全文检索 ngram插件
InnoDB全文索引:N-gram Parser[转] MySql5.7 建立全文索引 InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的.但对于像中文,日文 ...
- 用SUMIF对超15位的代码进行条件求和,出错了,原因是....
用SUMIF对超15位的代码进行条件求和,出错了,原因是.... 2017-10-29 23:01 一.问题 有读者朋友问: 用SUMIF进行条件求和时,如果统计的条件是超15位的代码,就会出错,比如 ...
- tcp的粘包和拆包示例以及使用LengthFieldFrameDecoder来解决的方法
粘包和拆包是什么? TCP协议是一种字节流协议,没有记录边界,我们在接收消息的时候,不能人为接收到的数据包就是一个整包消息 当客户端向服务器端发送多个消息数据的时候,TCP协议可能将多个消息数据合并成 ...
- Apache kylin的基础环境
一.Apache kylin的基础环境 由于Apache kylin上的OLAP(wiki:OLAP)是构建在hadoop生态环境上的,所以hadoop环境的稳定性和健壮性对kylin的稳定运行至关重 ...
- ECharts(中国地图篇)的使用
代码html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <me ...
- web.py框架之i18n支持
问题: 在web.py的模板文件中, 如何得到i18n的支持? Solution: 项目目录结构: proj/ |- code.py |- i18n/ |- messages.po |- en_US/ ...