由於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