内容简介: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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ANSI Common Lisp
Paul Graham / Prentice Hall / 1995-11-12 / USD 116.40
For use as a core text supplement in any course covering common LISP such as Artificial Intelligence or Concepts of Programming Languages. Teaching students new and more powerful ways of thinking abo......一起来看看 《ANSI Common Lisp》 这本书的介绍吧!