如何使用python

时间:2018-03-19 07:39:40

标签: python psutil disk-io

我想写一个python代码来读取磁盘io和网络io的百分比,就像我们在窗口任务管理器中看到的那样。目前我正在使用psutil.disk_io_counters()和psutil.net_io_counters()。通过这个,我得到字节读取字节写用于磁盘io和字节接收字节发送用于网络io 。但我不知道如何将它们转换成百分比。 还观察到disk_io_counters()和net_io_counters()不提供实例值。我已尝试过此link中提供的建议。但我没有得到我想要的价值。我的操作系统是窗口,但我希望它可以用作独立于平台的方式。因此,如果不安装任何工具,如iotop或iostat,是否可以按我的要求获取值?我尝试了以下代码:

import psutil, os
print('Disk: ',psutil.disk_io_counters())
print('Network: ',psutil.net_io_counters())

根据建议我正在编辑我的帖子。 我尝试了以下代码来检查使用psutil.io_counters()是否给出了即时磁盘io。代码是:

import psutil
import time
for x in range(10):
    for proc in psutil.process_iter():
        io_counters = proc.io_counters() 
        disk_usage_process = io_counters[2] + io_counters[3] # read_bytes + write_bytes
        print("PID: ", proc.pid, "Disk", disk_usage_process)
    print('************************************************************')
    time.sleep(1)

但我观察到的价值不是那个momemt。为了证明我已经使用io.counters()收集了两个系统进程的磁盘io,并且看到它经过一段时间后按升序改变。这意味着它是从进程的开始添加磁盘io。以下是快照:

PID:  10068 Disk 1597555    PID:  8608 Disk 99729700
PID:  10068 Disk 1597555    PID:  8608 Disk 99729828    
PID:  10068 Disk 1597555    PID:  8608 Disk 99729956
PID:  10068 Disk 1597555    PID:  8608 Disk 99730212
PID:  10068 Disk 1598271    PID:  8608 Disk 99730340
PID:  10068 Disk 1598271    PID:  8608 Disk 99730596
PID:  10068 Disk 1598271    PID:  8608 Disk 99730724
PID:  10068 Disk 1598271    PID:  8608 Disk 99730852
PID:  10068 Disk 1598271    PID:  8608 Disk 99731108
PID:  10068 Disk 1598271    PID:  8608 Disk 99731236

1 个答案:

答案 0 :(得分:1)

<强>问题

暂时获取进程的磁盘使用率和网络使用量占总磁盘和网络使用量的百分比

<强>解决方案

根据我手动检查的内容(在Windows上,使用here给出的步骤),read_bytes的{​​{1}}和write_bytes值应该为您提供磁盘I / O为了这个过程。使用yourProcess.io_counters()结合总I / O应该为您提供百分比

因此,获取磁盘使用百分比的代码如下所示

psutil.disk_io_counters()

但是对于网络使用,任务似乎并不那么容易。如上所述here

  

AFAIK大多数(全部?)操作系统都没有公开这些指标   不,不幸的是这(psutil.net_io_counters的过程版本)是不可能的

更新:尝试在循环中运行

 p = psutil.Process()
 io_counters = p.io_counters() 
 disk_usage_process = io_counters[2] + io_counters[3] # read_bytes + write_bytes
 disk_io_counter = psutil.disk_io_counters()
 disk_total = disk_io_counter[2] + disk_io_counter[3] # read_bytes + write_bytes
 print("Disk", disk_usage_process/disk_total * 100)