当前位置 博文首页 > 使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子

    使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子

    作者:admin 时间:2021-07-04 17:44

    例子一:

    Python用WMI模块获取windowns系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息。

    复制代码 代码如下:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    import wmi
    import os
    import sys
    import platform
    import time

    def sys_version(): 
        c = wmi.WMI ()
        #获取操作系统版本
        for sys in c.Win32_OperatingSystem():
            print "Version:%s" % sys.Caption.encode("UTF8"),"Vernum:%s" % sys.BuildNumber
            print  sys.OSArchitecture.encode("UTF8")#系统是32位还是64位的
            print sys.NumberOfProcesses #当前系统运行的进程总数

    def cpu_mem():
        c = wmi.WMI ()       
        #CPU类型和内存
        for processor in c.Win32_Processor():
            #print "Processor ID: %s" % processor.DeviceID
            print "Process Name: %s" % processor.Name.strip()
        for Memory in c.Win32_PhysicalMemory():
            print "Memory Capacity: %.fMB" %(int(Memory.Capacity)/1048576)

    def cpu_use():
        #5s取一次CPU的使用率
        c = wmi.WMI()
        while True:
            for cpu in c.Win32_Processor():
                 timestamp = time.strftime('%a, %d %b %Y %H:%M:%S', time.localtime())
                 print '%s | Utilization: %s: %d %%' % (timestamp, cpu.DeviceID, cpu.LoadPercentage)
                 time.sleep(5)    

    def disk():
        c = wmi.WMI ()   
        #获取硬盘分区
        for physical_disk in c.Win32_DiskDrive ():
            for partition in physical_disk.associators ("Win32_DiskDriveToDiskPartition"):
                for logical_disk in partition.associators ("Win32_LogicalDiskToPartition"):
                    print physical_disk.Caption.encode("UTF8"), partition.Caption.encode("UTF8"), logical_disk.Caption

        #获取硬盘使用百分情况
        for disk in c.Win32_LogicalDisk (DriveType=3):
            print disk.Caption, "%0.2f%% free" % (100.0 * long (disk.FreeSpace) / long (disk.Size))

    def network():
        c = wmi.WMI ()    
        #获取MAC和IP地址
        for interface in c.Win32_NetworkAdapterConfiguration (IPEnabled=1):
            print "MAC: %s" % interface.MACAddress
        for ip_address in interface.IPAddress:
            print "ip_add: %s" % ip_address
        print

        #获取自启动程序的位置
        for s in c.Win32_StartupCommand ():
            print "[%s] %s <%s>" % (s.Location.encode("UTF8"), s.Caption.encode("UTF8"), s.Command.encode("UTF8")) 

        
        #获取当前运行的进程
        for process in c.Win32_Process ():
            print process.ProcessId, process.Name

    def main():
        sys_version()
        #cpu_mem()
        #disk()
        #network()
        #cpu_use()

    if __name__ == '__main__':
        main()
        print platform.system()
        print platform.release()
        print platform.version()
        print platform.platform()
        print platform.machine()

    例子二:

    由于我用到的不多,所以只获取的CPU、内存和硬盘,如果需要其它资源,请参照msdn。

    复制代码 代码如下:

    import os
    import win32api
    import win32con
    import wmi
    import time

    def getSysInfo(wmiService = None):
        result = {}
        if wmiService == None:
            wmiService = wmi.WMI()
        # cpu
        for cpu in wmiService.Win32_Processor():
            timestamp = time.strftime('%a, %d %b %Y %H:%M:%S', time.localtime())
            result['cpuPercent'] = cpu.loadPercentage
        # memory
        cs = wmiService.Win32_ComputerSystem()
        os = wmiService.Win32_OperatingSystem()
        result['memTotal'] = int(int(cs[0].TotalPhysicalMemory)/1024/1024)
        result['memFree'] = int(int(os[0].FreePhysicalMemory)/1024)
        #disk
        result['diskTotal'] = 0
        result['diskFree'] = 0
        for disk in wmiService.Win32_LogicalDisk(DriveType=3):
            result['diskTotal'] += int(disk.Size)
            result['diskFree'] += int(disk.FreeSpace)
        result['diskTotal'] = int(result['diskTotal']/1024/1024)
        result['diskFree'] = int(result['diskFree']/1024/1024)
        return result

    if __name__ == '__main__':
        wmiService = wmi.WMI()
        while True:
            print getSysInfo(wmiService)
            time.sleep(3)

    采用的wmi模块获取的,由于wmi初始化时占用系统资源太高,所以如果需要循环获取,请在循环体外面把wmi对象初始化好,然后传入函数里面,这样就不会产生CPU资源过高的情况。

    jsjbwy
    下一篇:没有了