2012-01-12 7 views
4

私は、Windowsマシン上でSimicsCygwinを使用してUNIX環境のような環境でいくつかのコードを実行するこの混在​​環境で作業しています。私はCでコーディングしてきましたが、私はPythonで私のソリューションをやろうとしています。 UNIX環境で見つけることSC_PAGE_SIZEあなたは、単に行うことができます:あなたがCでコーディングしている場合WindowsでPythonを使用してSC_PAGE_SIZEを見つける

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

あなたが行うことができます:

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

しかし存在していないWindowsのos.sysconfでのpythonを使用した場合と、私は交換を見つけることができませんでした。環境のPAGE_SIZEを見つけるためにPythonで何が使えますか?

サイドノートは、私がなぜセットアップをそのまま使用しているのか不思議に思うかもしれません。それは私の選択ではありません。それは仕事からの宿題です。私が求めている質問は、宿題のためではなく自分の利益のためです。

答えて

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

+1

wmiはシステムperfにアクセスする方法です。申し訳ありませんが、適切なデータが得られません。それはdownvoteの価値があるのですか? :) – luc

1

私は見つけることができる唯一の等価がCにあったが、私はコードをコンパイルし、その後のpythonからそれを実行した場合、私は私が探していた結果を得ることができます。残念ながら今のところ、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)