如何在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库提供了各种平台上关于CPU、RAM等的信息:
psutil是一个模块,提供了一个接口,通过使用Python以可移植的方式检索正在运行的进程和系统利用率(CPU,内存)的信息,实现了ps、top和Windows任务管理器等工具提供的许多功能。
它目前支持Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD和NetBSD, 32位和64位架构,Python版本从2.6到3.5 (Python 2.4和2.5的用户可能使用2.1.3版本)。
一些例子:
#!/usr/bin/env python
import psutil
# gives a single float value
psutil.cpu_percent()
# gives an object with many fields
psutil.virtual_memory()
# you can convert that object to a dictionary
dict(psutil.virtual_memory()._asdict())
# you can have the percentage of used RAM
psutil.virtual_memory().percent
79.2
# you can calculate percentage of available memory
psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
20.8
以下是其他文档,提供了更多的概念和感兴趣的概念:
https://psutil.readthedocs.io/en/latest/
这是所有好东西的汇总:
psutil + os获得Unix和Windows兼容性:
这允许我们得到:
CPU
内存
磁盘
代码:
import os
import psutil # need: pip install psutil
In [32]: psutil.virtual_memory()
Out[32]: svmem(total=6247907328, available=2502328320, percent=59.9, used=3327135744, free=167067648, active=3671199744, inactive=1662668800, buffers=844783616, cached=1908920320, shared=123912192, slab=613048320)
In [33]: psutil.virtual_memory().percent
Out[33]: 60.0
In [34]: psutil.cpu_percent()
Out[34]: 5.5
In [35]: os.sep
Out[35]: '/'
In [36]: psutil.disk_usage(os.sep)
Out[36]: sdiskusage(total=50190790656, used=41343860736, free=6467502080, percent=86.5)
In [37]: psutil.disk_usage(os.sep).percent
Out[37]: 86.5
您可以使用命令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
使用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示例。
使用crontab运行不会打印pid
设置:*/1 * * * * sh dog.sh这一行在crontab -e
import os
import re
CUT_OFF = 90
def get_cpu_load():
cmd = "ps -Ao user,uid,comm,pid,pcpu --sort=-pcpu | head -n 2 | tail -1"
response = os.popen(cmd, 'r').read()
arr = re.findall(r'\S+', response)
print(arr)
needKill = float(arr[-1]) > CUT_OFF
if needKill:
r = os.popen(f"kill -9 {arr[-2]}")
print('kill:', r)
if __name__ == '__main__':
# Test CPU with
# $ stress --cpu 1
# crontab -e
# Every 1 min
# */1 * * * * sh dog.sh
# ctlr o, ctlr x
# crontab -l
print(get_cpu_load())