如何在Python中获取当前系统状态(当前CPU、RAM、空闲磁盘空间等)?理想情况下,它可以同时适用于Unix和Windows平台。

从我的搜索中似乎有一些可能的方法:

使用像PSI这样的库(目前似乎没有积极开发,在多个平台上也不支持)或像pystatgrab这样的库(从2007年开始似乎没有活动,也不支持Windows)。 使用平台特定的代码,例如使用os.popen("ps")或*nix系统的类似代码,以及ctypes.windll中的MEMORYSTATUS。Windows平台的kernel32(请参阅ActiveState上的配方)。可以将所有这些代码片段放在一个Python类中。

这并不是说这些方法不好,而是是否已经有一种支持良好的多平台方式来做同样的事情?


当前回答

关于CPU的详细信息,请使用psutil库 https://psutil.readthedocs.io/en/latest/#cpu 对于RAM频率(以MHz为单位),使用内置的Linux库dmidecode并操作输出位;)。此命令需要root权限,因此也需要提供您的密码。只需复制以下推荐替换mypass与您的密码

进口操作系统 操作系统。system("echo mpass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2") ------------------- 输出 --------------------------- 1600吨/秒 未知的 1600吨/秒 未知的0

更具体的 [i在os中的i。]popen("echo mpass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read()。if i.isdigit()]

-------------------------- 输出 ------------------------- [' 1600 ', ' 1600 ']

其他回答

基于cpu使用代码@Hrabal,这是我使用的:

from subprocess import Popen, PIPE

def get_cpu_usage():
    ''' Get CPU usage on Linux by reading /proc/stat '''

    sub = Popen(('grep', 'cpu', '/proc/stat'), stdout=PIPE, stderr=PIPE)
    top_vals = [int(val) for val in sub.communicate()[0].split('\n')[0].split[1:5]]

    return (top_vals[0] + top_vals[2]) * 100. /(top_vals[0] + top_vals[2] + top_vals[3])

仅适用于Linux: 只有stdlib依赖的RAM使用的一行代码:

import os
tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])

你可以读取/proc/meminfo来获得使用的内存

file1 = open('/proc/meminfo', 'r') 

for line in file1: 
    if 'MemTotal' in line: 
        x = line.split()
        memTotal = int(x[1])
        
    if 'Buffers' in line: 
        x = line.split()
        buffers = int(x[1])
        
    if 'Cached' in line and 'SwapCached' not in line: 
        x = line.split()
        cached = int(x[1])
    
    if 'MemFree' in line: 
        x = line.split()
        memFree = int(x[1])

file1.close()

percentage_used = int ( ( memTotal - (buffers + cached + memFree) ) / memTotal * 100 )
print(percentage_used)

使用psutil库。在Ubuntu 18.04上,pip在2019年1月30日安装了5.5.0(最新版本)。旧版本的行为可能有所不同。 你可以在Python中这样做来检查你的psutil版本:

from __future__ import print_function  # for Python2
import psutil
print(psutil.__versi‌​on__)

获取内存和CPU的统计信息:

from __future__ import print_function
import psutil
print(psutil.cpu_percent())
print(psutil.virtual_memory())  # physical memory usage
print('memory % used:', psutil.virtual_memory()[2])

virtual_memory (tuple)将包含系统范围内使用的内存百分比。对我来说,在Ubuntu 18.04上,这似乎被高估了几个百分点。

你也可以得到当前Python实例所使用的内存:

import os
import psutil
pid = os.getpid()
python_process = psutil.Process(pid)
memoryUse = python_process.memory_info()[0]/2.**30  # memory use in GB...I think
print('memory use:', memoryUse)

它给出了Python脚本的当前内存使用情况。

pypi页面上有一些更深入的psutil示例。

关于CPU的详细信息,请使用psutil库 https://psutil.readthedocs.io/en/latest/#cpu 对于RAM频率(以MHz为单位),使用内置的Linux库dmidecode并操作输出位;)。此命令需要root权限,因此也需要提供您的密码。只需复制以下推荐替换mypass与您的密码

进口操作系统 操作系统。system("echo mpass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2") ------------------- 输出 --------------------------- 1600吨/秒 未知的 1600吨/秒 未知的0

更具体的 [i在os中的i。]popen("echo mpass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read()。if i.isdigit()]

-------------------------- 输出 ------------------------- [' 1600 ', ' 1600 ']