Python的模块及详解(1)

栏目: Python · 发布时间: 6年前

内容简介: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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

修改代码的艺术

修改代码的艺术

Michael Feathers / 刘未鹏 / 人民邮电出版社 / 2007-09-25 / 59.00元

我们都知道,即使是最训练有素的开发团队,也不能保证始终编写出清晰高效的代码。如果不积极地修改、挽救,随着时间流逝,所有软件都会不可避免地渐渐变得复杂、难以理解,最终腐化、变质。因此,理解并修改已经编写好的代码,是每一位程序员每天都要面对的工作,也是开发程序新特性的基础。然而,与开发新代码相比,修改代码更加令人生畏,而且长期以来缺乏文献和资料可供参考。 本书是继《重构》和《重构与模式》之后探讨......一起来看看 《修改代码的艺术》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具