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