2012-01-12 100 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)