2012-01-12 98 views
4

我正在使用SimicsCygwin在Windows计算机上的混合环境中工作,以在unix环境中运行一些代码。我一直在C编程,但我有兴趣尝试在Python中完成我的解决方案。在UNIX环境中找到SC_PAGE_SIZE你可以简单地做:在Windows中使用Python查找SC_PAGE_SIZE

#Python-2.7, unix environment 
page_size = os.sysconf("SC_PAGE_SIZE") 

如果你在C编码,你可以这样做:

#C, unix environment 
size_t page_size = (size_t) sysconf (_SC_PAGESIZE); 

但是在Windows os.sysconf使用python不存在何时我一直无法找到替代品。我可以在Python中使用什么来查找环境的PAGE_SIZE

一个便笺,我知道你可能想知道为什么我使用该设置,因为它是,这不是我的选择。这是一份工作中的家庭作业。我问的问题是为了我自己的利益,这不是作业。

回答

8

尝试:

import mmap 

print mmap.PAGESIZE 
1

我不是系统专家,所以我没有对应于Windows上的SC_PAGE_SIZE。 Hovever,您可以使用WMI来查询系统性能。

这是一个应该给很多东西的例子。愿你发现你在找什么:

import win32com.client 

import unicodedata 
def _(text): 
    if type(text) is unicode: 
     return unicodedata.normalize('NFKD', text).encode('ascii','ignore') 
    return text 

def to_kb(x): 
    if x: 
     return int(x)/1024 
    return x 

strComputer = "." 
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") 
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2") 
colItems = objSWbemServices.ExecQuery("Select * from Win32_Process") 


for objItem in colItems: 
    print "------------------------------------------" 
    print "Command Line: ", _(objItem.CommandLine) 
    print "Process Id: ", objItem.ProcessId 

    print "Handle: ", objItem.Handle 
    print "Handle Count: ", objItem.HandleCount 
    print "Maximum Working Set Size: ", to_kb(objItem.MaximumWorkingSetSize) 
    print "Minimum Working Set Size: ", to_kb(objItem.MinimumWorkingSetSize) 
    print "Page Faults: ", objItem.PageFaults 
    print "PageFile Usage: ", objItem.PageFileUsage 
    print "Peak PageFile Usage: ", objItem.PeakPageFileUsage 
    print "Peak Virtual Size: ", objItem.PeakVirtualSize 
    print "Peak Working Set Size: ", objItem.PeakWorkingSetSize 
    print "Private Page Count: ", objItem.PrivatePageCount 
    print "Quota NonPaged Pool Usage: ", objItem.QuotaNonPagedPoolUsage 
    print "Quota Paged Pool Usage: ", objItem.QuotaPagedPoolUsage 
    print "Quota Peak NonPaged Pool Usage: ", objItem.QuotaPeakNonPagedPoolUsage 
    print "Quota Peak Paged Pool Usage: ", objItem.QuotaPeakPagedPoolUsage 
    print "Virtual Size: ", objItem.VirtualSize 
    print "Working Set Size: ", to_kb(objItem.WorkingSetSize) 
    print "Write Operation Count: ", objItem.WriteOperationCount 
    print "Write Transfer Count: ", objItem.WriteTransferCount 
+0

不幸的是,这是发现了大量的信息中的所有进程正在运行,但没有运行系统分页大小。谢谢你的尝试,但我会继续寻找。 – Genzume 2012-01-12 21:02:24

+1

wmi是访问系统性能的方式。对不起,你没有得到正确的数据。它值得downvote? :) – luc 2012-01-12 21:15:50

1

的只相当于我能找到的是C,但如果我编译代码,然后从蟒蛇执行它,我可以得到我一直在寻找的结果。不幸的是,现在似乎没有一个在Windows下工作的python命令就像unix版本一样简单,但这至少给了我一个结果。

int main(void) { 
     SYSTEM_INFO si; 
     GetSystemInfo(&si); 

     printf("%u", si.dwPageSize); 

     return 0; 
} 
0

这是可能的​​模块做到这一点:

from ctypes import Structure, byref, windll 
from ctypes.wintypes import WORD, DWORD, LPVOID 


class SYSTEM_INFO(Structure): 
    _fields_ = [ 
     ("wProcessorArchitecture", WORD), 
     ("wReserved", WORD), 
     ("dwPageSize", DWORD), 
     ("lpMinimumApplicationAddress", LPVOID), 
     ("lpMaximumApplicationAddress", LPVOID), 
     ("dwActiveProcessorMask", DWORD), 
     ("dwNumberOfProcessors", DWORD), 
     ("dwProcessorType", DWORD), 
     ("dwAllocationGranularity", DWORD), 
     ("wProcessorLevel", WORD), 
     ("wProcessorRevision", WORD), 
    ] 


si = SYSTEM_INFO() 
windll.kernel32.GetSystemInfo(byref(si)) 
print(si.dwPageSize)