基于python调用psutil模块过程解析


Posted in Python onDecember 20, 2019

这篇文章主要介绍了基于python调用psutils模块过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps,top,free等等。要获取这些系统信息,Python可以通过subprocess模块调用并获取结果。但这样做显得很麻烦,尤其是要写很多解析代码。

在Python中获取系统信息的另一个好办法是使用psutil这个第三方模块。顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。

代码如下

oshelper.py

#encoding=utf-8
import psutil 
import datetime 
 
#查看cpu的信息 
print u"CPU 个数 %s"%psutil.cpu_count() 
print u"物理CPU个数 %s"%psutil.cpu_count(logical=False) 
print u"CPU uptimes" 
print psutil.cpu_times() 
print "" 
 
#查看内存信息 
mem = psutil.virtual_memory()
print u"系统总内存 %s G"%(mem.total/1024/1024/1024) 
print u"系统可用内存 %s G"%(mem.available/1024/1024/1024) 
mem_rate = int(mem.available)/float(mem.total) 
print u"系统内存使用率 %s %%"%int(mem_rate*100) 

#交换分区
swapmem = psutil.swap_memory()
print u"交换分区 %s G"%(swapmem.total/1024/1024/1024) 
print u"交换分区可用 %s G"%(swapmem.free/1024/1024/1024) 
print u"交换分区使用率 %s %%"%int(swapmem.percent) 
#系统启动时间 
print u"系统启动时间 %s"%datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S") 
 
#系统用户 
users_count = len(psutil.users()) 
users_list = ",".join([ u.name for u in psutil.users()]) 
print u"当前有%s个用户,分别是%s"%(users_count, users_list) 
 
#网卡,可以得到网卡属性,连接数,当前流量等信息 
net = psutil.net_io_counters() 
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024) 
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024) 
print u"网卡接收流量 %s 网卡发送流量 %s"%(bytes_rcvd, bytes_sent) 
nis=psutil.net_io_counters(pernic=True)
print u"网卡 " ,tuple(nis)

#进程 进程的各种详细参数 
def show_process(pid):
  try:
    p = psutil.Process(pid) 
  
    p.name()  #进程名
    #p.exe()  #进程的bin路径
    #p.cwd()  #进程的工作目录绝对路径
    p.status()  #进程状态
    p.create_time() #进程创建时间
    #p.uids()  #进程uid信息
    #p.gids()  #进程的gid信息
    p.cpu_times()  #进程的cpu时间信息,包括user,system两个cpu信息
    #p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
    p.memory_percent() #进程内存利用率
    p.memory_info()  #进程内存rss,vms信息
    p.io_counters()  #进程的IO信息,包括读写IO数字及参数
    #p.connectios()  #返回进程列表
    p.num_threads() #进程开启的线程数
    '''
    听过psutil的Popen方法启动应用程序,可以跟踪程序的相关信息
    from subprocess import PIPE
    p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
    '''
    p.name()
    #p.username()
  except:
    pass
'''
pids=psutil.pids()
for pid in pids:
  show_process(pid)
'''
with open (r'd:\temp\test.txt','w') as f:
  sys.stdout=f
  for proc in psutil.process_iter():
  '''
    if proc.name() == "w3wp.exe":
      cpu_threshold=proc.cpu_percent(interval=2)/24 
      print proc.name(),proc.create_time(),cpu_threshold
      p.terminate() proc .kill()
      Iterate over all ports this process is listening to 
    for con in proc.get_connections():
      con
  '''
    pa=proc.as_dict()
    print pa.get('name'),pa.get('create_time'),pa.get('pid'),pa.get('status'),pa.get('connections'),pa.get('open_files'),pa.get('cpu_percent'),pa.get('memory_percent'),pa.get('username'),pa.get('num_threads')

print u"当前进程:",psutil.Process(os.getpid()).cmdline()

#磁盘 磁盘的使用量等等 
dps=psutil.disk_partitions()
for dp in dps:
  dp
du=psutil.disk_usage('/')
print u"硬盘总共容量 %s G"%(du.total/1024/1024/1024) 
print u"硬盘可用 %s G"%(du.free/1024/1024/1024)
print u"硬盘已用 %s %%"%(du.percent)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Django中同时使用多个配置文件的方法
Jul 22 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
详解Python self 参数
Aug 30 Python
Python queue队列原理与应用案例分析
Sep 27 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
python中的垃圾回收(GC)机制
Sep 21 Python
Python函数对象与闭包函数
Apr 13 Python
python如何使用jt400.jar包代码实例
Dec 20 #Python
基于python使用tibco ems代码实例
Dec 20 #Python
使用python实现数组、链表、队列、栈的方法
Dec 20 #Python
python隐藏类中属性的3种实现方法
Dec 19 #Python
Python合并2个字典成1个新字典的方法(9种)
Dec 19 #Python
关于Python中定制类的比较运算实例
Dec 19 #Python
在python中利用try..except来代替if..else的用法
Dec 19 #Python
You might like
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
基于jquery & json的省市区联动代码
2012/06/26 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
学习python 之编写简单乘法运算题
2016/02/27 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
见习报告的格式
2014/10/31 职场文书
2014年司机工作总结
2014/11/21 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
如何自己动手写SQL执行引擎
2021/06/02 MySQL