内容简介:Python的模块及详解(1)
psuitil模块
filecmp模块
一、系统性能信息模块psuitil
psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行 工具 提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。
1.安装:
#wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz --no-check-certificate # tar -xzvf psutil-2.0.0.tar.gz # cd psutil-2.0.0 # python setup.py install
2.获取系统性能信息
CPU信息:
>>> import psutil >>> psutil.cpu_times()#使用cpu_times方法获取CPU完整信息,需要显示所有逻辑CPU信息, >>> #指定方法变量percpu=True即可,如psutil.cpu_times(percpu=True) scputimes(user=38.039999999999999, nice=0.01, system=110.88, idle=177062.59, iowait=53.399999999999999, irq=2.9100000000000001, softirq=79.579999999999998, steal=0.0, guest=0.0) >>> psutil.cpu_times().user #获取单项数据信息,如用户user的CPU时间比 38.0 >>> psutil.cpu_count() #获取CPU的逻辑个数,默认logical=True4 >>> psutil.cpu_count(logical=False) #获取CPU的物理个数 2
内存信息:
psutil.virtual_memory() #获取内存完整信息 psutil.virtual_memory().total #获取内存总数 psutil.virtual_memory().free #获取空闲内存数 psutil.swap_memory() #获取SWAP分区信息
磁盘信息:
磁盘IO信息包括read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等
psutil.disk_partitions() #获取磁盘完整信息 psutil.disk_usage('/') #获取分区的使用情况 psutil.disk_io_counters() #获取硬盘的IO个数、读写信息 psutil.disk_io_counters(perdisk=True) #获取单个分区IO个数、读写信息
网络信息:
系统的网络信息与磁盘IO类似,涉及几个关键点,包括bytes_sent(发送字节数)、bytes_recv=28220119(接收字节数)、packets_sent=200978(发送数据包数)、packets_recv=212672(接收数据包数)等。
psutil.net_io_counters() #获取网络总的IO信息,默认pernic=False psutil.net_io_counters(pernic=True) #输出每个网络接口的IO信息
其他信息:
psutil.users() #返回当前登陆系统的用户信息 psutil.boot_time() #获取开机时间,以 Linux 时间格式显示 datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S") ‘2018-01-15 15:24:26‘ #转换成自然时间格式
3.系统进程管理方法
进程信息:
psutil.pids() #列出所有进程的PID p=psutil.Process(#) #实例化一个对象,参数为一进程的PID p.name() #进程名称 p.exe() #进程bin路径 p.status() #进程状态 p.cwd() #进程工作目录绝对路径 p.create_time() #创建时间,时间戳格式 p.uids() #进程uid信息 p.gids() #进程gid信息 p.cpu_time() #进程CPU时间信息 p.cpu_affinity() #进程CPU亲和度 p.memory_percent() #进程内存利用率 p.memory_info() #进程内存rss,vms信息 p.io_counters() #进程IO信息 p.connections() #打开进程Socket的namedutples列表 p.num_threads() #进程打开的线程数
popen类使用
popen类的作用是获取用户启动的应用程序进程信息,以便跟踪进程的运行状态
import psutil from subprocess import PIPE p = psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout=PIPE) p.name() p.communicate() p.cpu_times() #进程运行的CPU时间
参见:
https://github.com/giampaolo/psutil http://psutil.readthedocs.org/en/latest/
二、文件与目录差异对比方法—–filecmp模块
单文件对比
采用filecmp.cmp(f1,f2[,shallow])方法,比较文件名名为f1和f2的文件,相同返回True,不相同返回False,shallow默认为True,意思是只根据os.stat()方法返回的文件基本信息进行对比,比如最后访问时间、修改时间、状态改变时间等,会忽略文件内容的对比。当shallow为False时,则os.stat()与文件内容同时进行校验。
示例:比较单文件的差异。
>>> filecmp.cmp("/home/test/filecmp/f1","/home/test/filecmp/f3") True >>> filecmp.cmp("/home/test/filecmp/f1","/home/test/filecmp/f2") False
多文件对比
采用filecmp.cmpfiles(dir1,dir2,common[,shallow])方法,对比dir1与dir2目录给定的文件清单。该方法返回文件名的三个列表,分别为匹配、不匹配、错误。匹配为包含匹配的文件的列表,不匹配反之,错误列表包括了目录不存在文件、不具备读权限或其他原因导致的不能比较的文件清单。
示例:dir1与dir2目录中指定文件清单对比。
>>>filecmp.cmpfiles("/home/test/filecmp/dir1","/home/test/filecmp/dir2",['f1','f2','f3','f4','f5']) (['f1', 'f2'], ['f3'], ['f4', 'f5'])
目录对比
通过dircmp(a,b[,ignore[,hide]])类创建一个目录比较对象,其中a和b是参加比较的目录名。ignore代表文件名忽略的列表,并默认为[‘RCS’,’CVS’,’tags’];hide代表隐藏的列表,默认为[os.curdir,os.pardir]。dircmp类可以获得目录比较的详细信息,如只有在a目录中包括的文件、a与b都存在的子目录、匹配的文件等,同时支持递归。
dircmp提供了三个输出报告的方法:
·report(),比较当前指定目录中的内容;
·report_partial_closure(),比较当前指定目录及第一级子目录中的内容;
·report_full_closure(),递归比较所有指定目录的内容。
为输出更加详细的比较结果,dircmp类还提供了以下属性:
·left,左目录,如类定义中的a; ·right,右目录,如类定义中的b; ·left_list,左目录中的文件及目录列表; ·right_list,右目录中的文件及目录列表; ·common,两边目录共同存在的文件或目录; ·left_only,只在左目录中的文件或目录; ·right_only,只在右目录中的文件或目录; ·common_dirs,两边目录都存在的子目录; ·common_files,两边目录都存在的子文件; ·common_funny,两边目录都存在的子目录(不同os.stat()记录的错误); ·same_files,匹配相同的文件; ·diff_files,不匹配的文件; ·funny_files,两边目录中都存在,但无法比较的文件; ·subdirs,将common_dirs目录名映射到新的dircmp对象,格式为字典类型。
示例:对比dir1与dir2的目录差异。通过调用dircmp()方法实现目录差异对比功能,同时输出目录对比对象所有属性信息。 /home/test/filecmp/simple1.py
import filecmp a="/home/test/filecmp/dir1" #定义左目录 b="/home/test/filecmp/dir2" #定义右目录 dirobj=filecmp.dircmp(a,b,['test.py']) #目录比较,忽略test.py文件 dirobj.report() dirobj.report_partial_closure() dirobj.report_full_closure() print "left_list:"+ str(dirobj.left_list) print "right_list:"+ str(dirobj.right_list) print "common:"+ str(dirobj.common) print "left_only:"+ str(dirobj.left_only) print "right_only:"+ str(dirobj.right_only) print "common_dirs:"+ str(dirobj.common_dirs) print "common_files:"+ str(dirobj.common_files) print "common_funny:"+ str(dirobj.common_funny) print "same_file:"+ str(dirobj.same_files) print "diff_files:"+ str(dirobj.diff_files) print "funny_files:"+ str(dirobj.funny_files)
原创文章,作者:nene,如若转载,请注明出处:http://www.178linux.com/91122
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Node.js开发指南
郭家寶(BYVoid) / 人民邮电出版社 / 2012-7 / 45.00元
Node.js是一种方兴未艾的新技术,诞生于2009年。经过两年的快速变化,Node.js生态圈已经逐渐走向稳定。Node.js采用了以往类似语言和框架中非常罕见的技术,总结为关键词就是:非阻塞式控制流、异步I/O、单线程消息循环。不少开发者在入门时总要经历一个痛苦的思维转变过程,给学习带来巨大的障碍。 而本书的目的就是帮助读者扫清这些障碍,学会使用Node.js进行Web后端开发,同时掌握事件驱......一起来看看 《Node.js开发指南》 这本书的介绍吧!