2012-01-12 1 views
4

Я работаю в этой смешанной среде, где я нахожусь на компьютере с Windows, используя Simics и Cygwin для запуска кода в среде, подобной unix. Я был кодированием в C, но я заинтересован в том, чтобы попытаться выполнить свое решение в Python. В среде UNIX, чтобы найти SC_PAGE_SIZE вы можете просто сделать:Поиск SC_PAGE_SIZE с использованием Python в Windows

#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, чтобы найти PAGE_SIZE среды.

Замечание, я знаю, что вы можете задаться вопросом, почему я использую установку как есть, и это не мой выбор. Это домашнее задание с работы. Вопрос, который я задаю, для моей собственной выгоды - это не для домашней работы.

ответ

1

Я не эксперт в системе, поэтому я не знаю, что соответствует 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

+1

wmi - это способ доступа к системе perf. жаль, что вы не получите правильные данные. стоит ли нижестоящая? :) – luc

1

Единственный эквивалент я смог найти в C, но если я компиляции кода, а затем выполнить его из питона я могу получить результат, который я искал. К сожалению, на данный момент не существует команды python, которая работает в Windows, которая так же проста, как версия unix, но это по крайней мере дает мне результат.

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

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

     return 0; 
} 
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)