在Windows中使用Python获取SC_PAGE_SIZE
我现在在一个混合的环境中工作,使用的是Windows电脑,借助Simics
和Cygwin
来运行一些类似Unix的代码。我一直在用C语言编程,但我想尝试用Python来解决我的问题。在Unix环境中,要找到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上使用Python时,os.sysconf
这个功能是不存在的,我一直找不到替代的方法。我该用什么来在Python中找到环境的PAGE_SIZE
呢?
顺便说一下,我知道你可能会好奇我为什么要用这样的设置,但这并不是我自己的选择。这是工作上的一个作业任务。我问这个问题是为了我自己的理解,并不是为了完成作业。
4 个回答
1
我找到的唯一类似的东西是在C语言里,不过如果我先编译这个代码,然后从Python里执行它,我就能得到我想要的结果。可惜的是,目前在Windows上似乎没有一个像Unix版本那样简单的Python命令,但这样至少能让我得到结果。
int main(void) {
SYSTEM_INFO si;
GetSystemInfo(&si);
printf("%u", si.dwPageSize);
return 0;
}
1
我不是系统方面的专家,所以我不太清楚在Windows系统中SC_PAGE_SIZE对应的是什么。不过,你可以使用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
13
试试这个:
import mmap
print mmap.PAGESIZE