由于ironpython本身没有提供获取磁盘io的api,所以要通过调用C#提供的api才行,C#也只能是通过非托管方式调用windows提供的api GetProcessIoCounters 来获取磁盘的io
文件名:ProcIOCounter.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ProcIOCounter
{
public class kernel32
{
public struct IO_COUNTERS
{
public ulong ReadOperationCount;
public ulong WriteOperationCount;
public ulong OtherOperationCount;
public ulong ReadTransferCount;
public ulong WriteTransferCount;
public ulong OtherTransferCount;
}
[DllImport("kernel32.dll")]
public static extern bool GetProcessIoCounters(IntPtr ProcessHandle, out IO_COUNTERS IoCounters);
}
}
将上面的C#文件编译生成ProcIOCounter.dll ,并且将它放到ironpython所在的文件夹内
文件名:test.py
from ProcIOCounter.kernel32 import IO_COUNTERS, GetProcessIoCounters
from System.Diagnostics.Process import GetCurrentProcess
def get_proc_iospeed(proc):
handle = proc.Handle
counter = clr.Reference[IO_COUNTERS]() #这个结构体跟上面C#中定义的是对应的
GetProcessIoCounters(handle,counter)
return (counter.ReadTransferCount, counter.WriteTransferCount)
if __name__ == "__main__":
proc = GetCurrentProcess()
r,w = get_proc_iospeed(proc)
print r
print w
执行方式:ipy test.py
转载请注明出处:http://blog.csdn.net/liujian0616/article/details/7951739