4

我在这种混合环境中工作,我在 Windows 机器上使用SimicsCygwin在类似 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

4 回答 4

10

尝试:

import mmap

print mmap.PAGESIZE
于 2012-12-07T01:32:43.893 回答
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
于 2012-01-12T20:56:02.390 回答
1

我能找到的唯一等价物是在 C 中,但如果我编译代码然后从 python 执行它,我可以获得我正在寻找的结果。不幸的是,到目前为止,似乎还没有一个在 Windows 中工作的 python 命令像 unix 版本一样简单,但这至少给了我一个结果。

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

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

        return 0;
}
于 2012-10-11T06:55:09.020 回答
0

ctypes可以使用模块来做到这一点:

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)
于 2018-01-15T08:56:09.840 回答