メモリーの情報を取得する

 Windowsのタスクマネージャのパフォーマンスのところに出てくるメモリの情報は次のようなものがあります。

繧ソ繧ケ繧ッ繝槭ロ繝シ繧ク繝」縺ョ繝。繝「繝ェ螳ケ驥剰。ィ遉コ

こんな情報をIron Pythonのスクリプトで入手したいと思います。

 WMIを使ってみる

 いきなりWMIと書きましたが、意味は"Windows Management Instrumentation (Windowsのシステム管理用インターフェイス)"という意味らしい。よく分からないけれど、Windowsのハード(実際の機械)管理に使われているらしい。まあ、ふ〜ん程度に流しておいて実際使ってみましょう。 まずはいつものおまじないから

import clr
clr.AddReference('System.Management')
from System.Management import ManagementClass

今回使うクラスはSystem.ManagementにあるManagementClassというクラスを使います。
ManagementClassというのがちょっとややこしく、私の理解ではWMIクラスを管理するクラスです。ちなみにWMIクラスがハード情報を持っている今回の目的のクラスです。
ManagementClassにもいくつも種類があるようで今回は"Win32_OperatingSystem"を使います。したがって次の記述になります。

MClass = ManagementClass('Win32_OperatingSystem')
MObjList= MClass.GetInstances()

"Win32_OperatingSystem"のManagementClassを定義したあと、GetInstancesメゾットでMClassが管理しているWMIクラスのコレクション(簡単にいうとリスト)を渡します。WMIクラスのことをNET FrameworkではManagementObjectと呼んでいます。ListといってもMClassが管理するWMIクラスは1つしかないのでわざわざListにしている意味がないですが、そういう風に作ってあるので仕方ありません。

for MObj in MObjList:
  for property in MObj.Properties:

MObjListからMObj(WMIクラス)を抜き出してクラスのプロパティにアクセスするためのコードです。
では次のスクリプトを動かして、プロパティの中身を見てみましょう。

import clr
clr.AddReference('System.Management')
from System.Management import ManagementClass

MClass = ManagementClass('Win32_OperatingSystem')
MObjList= MClass.GetInstances()
for MObj in MObjList:
  for property in MObj.Properties:
    print property.Name,":",property.Value

raw_input()

 ではメモリの情報をみてみましょう

 そろそろ本題のに戻って、上のスクリプトの結果をみると"TotalVisibleMemorySize"、"TotalVirtualMemorySize"、"FreePhysicalMemory"なんかのプロパティ値を使えばよいことがわかるでしょう。またMObjはPythonの辞書みたいな構造を持ち合わせてるので
MObj['TotalVisibleMemorySize']を使えばすぐにシステムの情報にアクセスできます。という訳で目的のスクリプトは次のようになります。

import clr
clr.AddReference('System.Management')
from System.Management import ManagementClass

MClass = ManagementClass('Win32_OperatingSystem')
MObjList= MClass.GetInstances()
for MObj in MObjList:
  print "合計物理メモリ: ", MObj['TotalVisibleMemorySize'], "KB"
  print "合計仮想メモリ: ", MObj['TotalVirtualMemorySize'], "KB"
  print "利用可能物理メモリ: ", MObj['FreePhysicalMemory'], "KB"
  print "利用可能仮想メモリ: ", MObj['FreeVirtualMemory'], "KB"

  total = MObj['SizeStoredInPagingFiles'] - MObj['FreeSpaceInPagingFiles']

  print "コミットチャージ合計 : ", total, "KB"
  print "コミットチャージ制限値: ", MObj['SizeStoredInPagingFiles'], "KB"

raw_input()

出力画面:
 合計物理メモリ: 1832492 KB
 合計仮想メモリ: 2097024 KB
 利用可能物理メモリ: 857944 KB
 利用可能仮想メモリ: 2048500 KB
 コミットチャージ合計 : 811332 KB
 コミットチャージ制限値: 4422064 KB

 WMIについて補足

 WMIはもともと、スクリプトなどで簡単にシステムの情報を取得するために考えられた規格です。なので"Win32_OperatingSystem"の部分を変えるだけで、いろんなシステムの情報が得られます。例えばCPUの情報を見たければ次のようにします。

import clr
clr.AddReference('System.Management')
from System.Management import ManagementClass

MClass = ManagementClass('Win32_Processor')
MOCollection = MClass.GetInstances()
for MObj in MOCollection:
print "CPU名: ", MObj['Name']

raw_input()

出力画面:
 CPU名: Genuine Intel(R) CPU T2300 @ 1.66GHz
ManagementClassの種類には以下のようにいっぱいあります。
システム情報入手にはかなり役に立つのではないでしょうか。
 Win32_1394Controller
 Win32_1394ControllerDevice
 Win32_Account
 Win32_AccountSID
 Win32_ACE
 Win32_ActionCheck
 Win32_AllocatedResource
 Win32_ApplicationCommandLine
 Win32_ApplicationService
 Win32_AssociatedBattery
 Win32_AssociatedProcessorMemory
 Win32_BaseBoard
 Win32_BaseService
 Win32_Battery
 Win32_Binary
 Win32_BindImageAction
 Win32_BIOS
 Win32_BootConfiguration
 Win32_Bus
 Win32_CacheMemory
 Win32_CDROMDrive
 Win32_CheckCheck
 Win32_CIMLogicalDeviceCIMDataFile
 Win32_ClassicCOMApplicationClasses
 Win32_ClassicCOMClass
 Win32_ClassicCOMClassSetting
 Win32_ClassicCOMClassSettings
 Win32_ClassInfoAction
 Win32_ClientApplicationSetting
 Win32_CodecFile
 Win32_COMApplication
 Win32_COMApplicationClasses
 Win32_COMApplicationSettings
 Win32_COMClass
 Win32_ComClassAutoEmulator
 Win32_ComClassEmulator
 Win32_CommandLineAccess
 Win32_ComponentCategory
 Win32_ComputerSystem
 Win32_ComputerSystemProcessor
 Win32_ComputerSystemProduct
 Win32_COMSetting
 Win32_Condition
 Win32_CreateFolderAction
 Win32_CurrentProbe
 Win32_DCOMApplication
 Win32_DCOMApplicationAccessAllowedSetting
 Win32_DCOMApplicationLaunchAllowedSetting
 Win32_DCOMApplicationSetting
 Win32_DependentService
 Win32_Desktop
 Win32_DesktopMonitor
 Win32_DeviceBus
 Win32_DeviceMemoryAddress
 Win32_DeviceSettings
 Win32_Directory
 Win32_DirectorySpecification
 Win32_DiskDrive
 Win32_DiskDriveToDiskPartition
 Win32_DiskPartition
 Win32_DisplayConfiguration
 Win32_DisplayControllerConfiguration
 Win32_DMAChannel
 Win32_DriverVXD
 Win32_DuplicateFileAction
 Win32_Environment
 Win32_EnvironmentSpecification
 Win32_ExtensionInfoAction
 Win32_Fan
 Win32_FileSpecification
 Win32_FloppyController
 Win32_FloppyDrive
 Win32_FontInfoAction
 Win32_Group
 Win32_GroupUser
 Win32_HeatPipe
 Win32_IDEController
 Win32_IDEControllerDevice
 Win32_ImplementedCategory
 Win32_InfraredDevice
 Win32_IniFileSpecification
 Win32_InstalledSoftwareElement
 Win32_IRQResource
 Win32_Keyboard
 Win32_LaunchCondition
 Win32_LoadOrderGroup
 Win32_LoadOrderGroupServiceDependencies
 Win32_LoadOrderGroupServiceMembers
 Win32_LogicalDisk
 Win32_LogicalDiskRootDirectory
 Win32_LogicalDiskToPartition
 Win32_LogicalFileAccess
 Win32_LogicalFileAuditing
 Win32_LogicalFileGroup
 Win32_LogicalFileOwner
 Win32_LogicalFileSecuritySetting
 Win32_LogicalMemoryConfiguration
 Win32_LogicalProgramGroup
 Win32_LogicalProgramGroupDirectory
 Win32_LogicalProgramGroupItem
 Win32_LogicalProgramGroupItemDataFile
 Win32_LogicalShareAccess
 Win32_LogicalShareAuditing
 Win32_LogicalShareSecuritySetting
 Win32_ManagedSystemElementResource
 Win32_MemoryArray
 Win32_MemoryArrayLocation
 Win32_MemoryDevice
 Win32_MemoryDeviceArray
 Win32_MemoryDeviceLocation
 Win32_MethodParameterClass
 Win32_MIMEInfoAction
 Win32_MotherboardDevice
 Win32_MoveFileAction
 Win32_MSIResource
 Win32_NetworkAdapter
 Win32_NetworkAdapterConfiguration
 Win32_NetworkAdapterSetting
 Win32_NetworkClient
 Win32_NetworkConnection
 Win32_NetworkLoginProfile
 Win32_NetworkProtocol
 Win32_NTEventlogFile
 Win32_NTLogEvent
 Win32_NTLogEventComputer
 Win32_NTLogEventLog
 Win32_NTLogEventUser
 Win32_ODBCAttribute
 Win32_ODBCDataSourceAttribute
 Win32_ODBCDataSourceSpecification
 Win32_ODBCDriverAttribute
 Win32_ODBCDriverSoftwareElement
 Win32_ODBCDriverSpecification
 Win32_ODBCSourceAttribute
 Win32_ODBCTranslatorSpecification
 Win32_OnBoardDevice
 Win32_OperatingSystem
 Win32_OperatingSystemQFE
 Win32_OSRecoveryConfiguration
 Win32_PageFile
 Win32_PageFileElementSetting
 Win32_PageFileSetting
 Win32_PageFileUsage
 Win32_ParallelPort
 Win32_Patch
 Win32_PatchFile
 Win32_PatchPackage
 Win32_PCMCIAController
 Win32_Perf
 Win32_PerfRawData
 Win32_PerfRawData_ASP_ActiveServerPages
 Win32_PerfRawData_ASPNET_114322_ASPNETAppsv114322
 Win32_PerfRawData_ASPNET_114322_ASPNETv114322
 Win32_PerfRawData_ASPNET_ASPNET
 Win32_PerfRawData_ASPNET_ASPNETApplications
 Win32_PerfRawData_IAS_IASAccountingClients
 Win32_PerfRawData_IAS_IASAccountingServer
 Win32_PerfRawData_IAS_IASAuthenticationClients
 Win32_PerfRawData_IAS_IASAuthenticationServer
 Win32_PerfRawData_InetInfo_InternetInformationServicesGlobal
 Win32_PerfRawData_MSDTC_DistributedTransactionCoordinator
 Win32_PerfRawData_MSFTPSVC_FTPService
 Win32_PerfRawData_MSSQLSERVER_SQLServerAccessMethods
 Win32_PerfRawData_MSSQLSERVER_SQLServerBackupDevice
 Win32_PerfRawData_MSSQLSERVER_SQLServerBufferManager
 Win32_PerfRawData_MSSQLSERVER_SQLServerBufferPartition
 Win32_PerfRawData_MSSQLSERVER_SQLServerCacheManager
 Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases
 Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics
 Win32_PerfRawData_MSSQLSERVER_SQLServerLatches
 Win32_PerfRawData_MSSQLSERVER_SQLServerLocks
 Win32_PerfRawData_MSSQLSERVER_SQLServerMemoryManager
 Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationAgents
 Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationDist
 Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationLogreader
 Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationMerge
 Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationSnapshot
 Win32_PerfRawData_MSSQLSERVER_SQLServerSQLStatistics
 Win32_PerfRawData_MSSQLSERVER_SQLServerUserSettable
 Win32_PerfRawData_NETFramework_NETCLRExceptions
 Win32_PerfRawData_NETFramework_NETCLRInterop
 Win32_PerfRawData_NETFramework_NETCLRJit
 Win32_PerfRawData_NETFramework_NETCLRLoading
 Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads
 Win32_PerfRawData_NETFramework_NETCLRMemory
 Win32_PerfRawData_NETFramework_NETCLRRemoting
 Win32_PerfRawData_NETFramework_NETCLRSecurity
 Win32_PerfRawData_Outlook_Outlook
 Win32_PerfRawData_PerfDisk_PhysicalDisk
 Win32_PerfRawData_PerfNet_Browser
 Win32_PerfRawData_PerfNet_Redirector
 Win32_PerfRawData_PerfNet_Server
 Win32_PerfRawData_PerfNet_ServerWorkQueues
 Win32_PerfRawData_PerfOS_Cache
 Win32_PerfRawData_PerfOS_Memory
 Win32_PerfRawData_PerfOS_Objects
 Win32_PerfRawData_PerfOS_PagingFile
 Win32_PerfRawData_PerfOS_Processor
 Win32_PerfRawData_PerfOS_System
 Win32_PerfRawData_PerfProc_FullImage_Costly
 Win32_PerfRawData_PerfProc_Image_Costly
 Win32_PerfRawData_PerfProc_JobObject
 Win32_PerfRawData_PerfProc_JobObjectDetails
 Win32_PerfRawData_PerfProc_Process
 Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly
 Win32_PerfRawData_PerfProc_Thread
 Win32_PerfRawData_PerfProc_ThreadDetails_Costly
 Win32_PerfRawData_RemoteAccess_RASPort
 Win32_PerfRawData_RemoteAccess_RASTotal
 Win32_PerfRawData_RSVP_ACSPerRSVPService
 Win32_PerfRawData_Spooler_PrintQueue
 Win32_PerfRawData_TapiSrv_Telephony
 Win32_PerfRawData_Tcpip_ICMP
 Win32_PerfRawData_Tcpip_IP
 Win32_PerfRawData_Tcpip_NBTConnection
 Win32_PerfRawData_Tcpip_NetworkInterface
 Win32_PerfRawData_Tcpip_TCP
 Win32_PerfRawData_Tcpip_UDP
 Win32_PerfRawData_W3SVC_WebService
 Win32_PhysicalMemory
 Win32_PhysicalMemoryArray
 Win32_PhysicalMemoryLocation
 Win32_PNPAllocatedResource
 Win32_PnPDevice
 Win32_PnPEntity
 Win32_PointingDevice
 Win32_PortableBattery
 Win32_PortConnector
 Win32_PortResource
 Win32_POTSModem
 Win32_POTSModemToSerialPort
 Win32_PowerManagementEvent
 Win32_Printer
 Win32_PrinterConfiguration
 Win32_PrinterController
 Win32_PrinterDriverDll
 Win32_PrinterSetting
 Win32_PrinterShare
 Win32_PrintJob
 Win32_PrivilegesStatus
 Win32_Process
 Win32_Processor
 Win32_ProcessStartup
 Win32_Product
 Win32_ProductCheck
 Win32_ProductResource
 Win32_ProductSoftwareFeatures
 Win32_ProgIDSpecification
 Win32_ProgramGroup
 Win32_ProgramGroupContents
 Win32_ProgramGroupOrItem
 Win32_Property
 Win32_ProtocolBinding
 Win32_PublishComponentAction
 Win32_QuickFixEngineering
 Win32_Refrigeration
 Win32_Registry
 Win32_RegistryAction
 Win32_RemoveFileAction
 Win32_RemoveIniAction
 Win32_ReserveCost
 Win32_ScheduledJob
 Win32_SCSIController
 Win32_SCSIControllerDevice
 Win32_SecurityDescriptor
 Win32_SecuritySetting
 Win32_SecuritySettingAccess
 Win32_SecuritySettingAuditing
 Win32_SecuritySettingGroup
 Win32_SecuritySettingOfLogicalFile
 Win32_SecuritySettingOfLogicalShare
 Win32_SecuritySettingOfObject
 Win32_SecuritySettingOwner
 Win32_SelfRegModuleAction
 Win32_SerialPort
 Win32_SerialPortConfiguration
 Win32_SerialPortSetting
 Win32_Service
 Win32_ServiceControl
 Win32_ServiceSpecification
 Win32_ServiceSpecificationService
 Win32_SettingCheck
 Win32_Share
 Win32_ShareToDirectory
 Win32_ShortcutAction
 Win32_ShortcutFile
 Win32_ShortcutSAP
 Win32_SID
 Win32_SMBIOSMemory
 Win32_SoftwareElement
 Win32_SoftwareElementAction
 Win32_SoftwareElementCheck
 Win32_SoftwareElementCondition
 Win32_SoftwareElementResource
 Win32_SoftwareFeature
 Win32_SoftwareFeatureAction
 Win32_SoftwareFeatureCheck
 Win32_SoftwareFeatureParent
 Win32_SoftwareFeatureSoftwareElements
 Win32_SoundDevice
 Win32_StartupCommand
 Win32_SubDirectory
 Win32_SystemAccount
 Win32_SystemBIOS
 Win32_SystemBootConfiguration
 Win32_SystemDesktop
 Win32_SystemDevices
 Win32_SystemDriver
 Win32_SystemDriverPNPEntity
 Win32_SystemEnclosure
 Win32_SystemLoadOrderGroups
 Win32_SystemLogicalMemoryConfiguration
 Win32_SystemMemoryResource
 Win32_SystemNetworkConnections
 Win32_SystemOperatingSystem
 Win32_SystemPartitions
 Win32_SystemProcesses
 Win32_SystemProgramGroups
 Win32_SystemResources
 Win32_SystemServices
 Win32_SystemSetting
 Win32_SystemSlot
 Win32_SystemSystemDriver
 Win32_SystemTimeZone
 Win32_SystemUsers
 Win32_TapeDrive
 Win32_TemperatureProbe
 Win32_Thread
 Win32_TimeZone
 Win32_Trustee
 Win32_TypeLibraryAction
 Win32_UninterruptiblePowerSupply
 Win32_USBController
 Win32_USBControllerDevice
 Win32_UserAccount
 Win32_UserDesktop
 Win32_VideoConfiguration
 Win32_VideoController
 Win32_VideoSettings
 Win32_VoltageProbe
 Win32_WMIElementSetting
 Win32_WMISetting