如何在Python中获取当前系统状态(当前CPU、RAM、空闲磁盘空间等)?理想情况下,它可以同时适用于Unix和Windows平台。
从我的搜索中似乎有一些可能的方法:
使用像PSI这样的库(目前似乎没有积极开发,在多个平台上也不支持)或像pystatgrab这样的库(从2007年开始似乎没有活动,也不支持Windows)。
使用平台特定的代码,例如使用os.popen("ps")或*nix系统的类似代码,以及ctypes.windll中的MEMORYSTATUS。Windows平台的kernel32(请参阅ActiveState上的配方)。可以将所有这些代码片段放在一个Python类中。
这并不是说这些方法不好,而是是否已经有一种支持良好的多平台方式来做同样的事情?
使用psutil库。在Ubuntu 18.04上,pip在2019年1月30日安装了5.5.0(最新版本)。旧版本的行为可能有所不同。
你可以在Python中这样做来检查你的psutil版本:
from __future__ import print_function # for Python2
import psutil
print(psutil.__version__)
获取内存和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示例。
使用psutil库。在Ubuntu 18.04上,pip在2019年1月30日安装了5.5.0(最新版本)。旧版本的行为可能有所不同。
你可以在Python中这样做来检查你的psutil版本:
from __future__ import print_function # for Python2
import psutil
print(psutil.__version__)
获取内存和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示例。
您可以使用命令pip install SystemScripter来使用最近发布的SystemScripter库。这个库使用其他库(如psutil)创建一个完整的系统信息库,涵盖从CPU到磁盘的信息。
对于当前的CPU使用率使用函数:
SystemScripter.CPU.CpuPerCurrentUtil(SystemScripter.CPU()) #class init as self param if not work
这是使用百分比或使用情况:
SystemScripter.CPU.CpuCurrentUtil(SystemScripter.CPU())
https://pypi.org/project/SystemScripter/#description
你可以在subprocess中使用psutil或psmem
示例代码
import subprocess
cmd = subprocess.Popen(['sudo','./ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out,error = cmd.communicate()
memory = out.splitlines()
参考
https://github.com/Leo-g/python-flask-cmd
通过结合tqdm和psutil,可以获得实时的CPU和RAM监控。当运行繁重的计算/处理时,它可能很方便。
它也可以在Jupyter中工作,无需任何代码更改:
from tqdm import tqdm
from time import sleep
import psutil
with tqdm(total=100, desc='cpu%', position=1) as cpubar, tqdm(total=100, desc='ram%', position=0) as rambar:
while True:
rambar.n=psutil.virtual_memory().percent
cpubar.n=psutil.cpu_percent()
rambar.refresh()
cpubar.refresh()
sleep(0.5)
使用多处理库将这些进度条放在单独的进程中是很方便的。
此代码片段也可作为要点。