基于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中的装饰器用法详解
Jan 14 Python
详解Python字符串对象的实现
Dec 24 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
pandas多级分组实现排序的方法
Apr 20 Python
对python append 与浅拷贝的实例讲解
May 04 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
使用Python进行目录的对比方法
Nov 01 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
关于Python中定制类的比较运算实例
Dec 19 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
Python列表如何更新值
May 27 Python
python re的findall和finditer的区别详解
Nov 15 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
文件系统基本操作类
2006/11/23 PHP
php2html php生成静态页函数
2008/12/08 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
推荐下python/ironpython:从入门到精通
2007/10/02 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
Python 监测文件是否更新的方法
2019/06/10 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
瑞士国际航空官网:SWISS
2016/07/21 全球购物
文秘专业个人求职信
2013/12/22 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
个人工作总结范文2014
2014/11/07 职场文书
2014年人大工作总结
2014/12/10 职场文书
公务员年度考核评语
2014/12/31 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python
AJAX实现省市县三级联动效果
2021/10/16 Javascript
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA