基于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 相关文章推荐
介绍Python中的__future__模块
Apr 27 Python
python类和继承用法实例
Jul 07 Python
Python面向对象编程基础解析(一)
Oct 26 Python
浅谈python可视化包Bokeh
Feb 07 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
Python操作json的方法实例分析
Dec 06 Python
Python笔试面试题小结
Sep 07 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
python打印异常信息的两种实现方式
Dec 24 Python
keras 指定程序在某块卡上训练实例
Jun 22 Python
python实现感知机模型的示例
Sep 30 Python
详解Python中list[::-1]的几种用法
Nov 16 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 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
python 追踪except信息方式
2020/04/25 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
python super()函数的基本使用
2020/09/10 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
python爬虫工具例举说明
2020/11/30 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
幼儿园课题方案
2014/06/09 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
高三毕业评语
2014/12/31 职场文书
2015年教学工作总结
2015/04/02 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书