例如,我想知道如何使用 bash 获取系统 CPU 使用率并以百分比形式呈现。
示例输出:
57%
如果有多个核心,如果能够计算出平均百分比就好了。
答案1
这样做是为了查看总体CPU使用率。这个调用python3
并使用跨平台psutil
模块。
printf "%b" "import psutil\nprint('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
该interval=2
部分表示要测量 2 秒阻塞时间内的总 CPU 负载。
示例输出:
9.4%
它包含的python程序是这样的:
import psutil
print('{}%'.format(psutil.cpu_percent(interval=2)))
放在time
调用前面证明在这种情况下需要大约 2 秒的指定间隔时间。这是调用和输出:
$ time printf "%b" "import psutil\nprint('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
9.5%
real 0m2.127s
user 0m0.119s
sys 0m0.008s
查看输出以及单独的核心,下面我们来使用这个python程序。首先,我获得“每个 CPU”信息的 python 列表(数组),然后对该列表中的所有内容进行平均以获得“总 % CPU”类型值。然后我打印总数和单个核心百分比。
Python程序:
import psutil
cpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)
avg = sum(cpu_percent_cores)/len(cpu_percent_cores)
cpu_percent_total_str = ('%.2f' % avg) + '%'
cpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]
print('Total: {}'.format(cpu_percent_total_str))
print('Individual CPUs: {}'.format(' '.join(cpu_percent_cores_str)))
如果您愿意,可以将其包装成一个极其丑陋的单行 bash 脚本,如下所示。我必须确保在 Python 程序中仅使用单引号 ( ''
),而不是双引号 ( ""
),以便将其包装到 bash 1-liner 中:
printf "%b" "import psutil\n\
cpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)\n\
avg = sum(cpu_percent_cores)/len(cpu_percent_cores)\n\
cpu_percent_total_str = ('%.2f' % avg) + '%'\n\
cpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]\n\
print('Total: {}'.format(cpu_percent_total_str))\n\
print('Individual CPUs: {}'.format(' '.join(cpu_percent_cores_str)))\n\
" | python3
示例输出:请注意,我有 8 个核心,因此“Individual CPUs:”后面有 8 个数字:
Total: 10.15%
Individual CPUs: 11.00% 8.50% 11.90% 8.50% 9.90% 7.60% 11.50% 12.30%
为了有关psutil.cpu_percent(interval=2)
python 调用如何工作的更多信息,参见官方psutil.cpu_percent(interval=None, percpu=False)
文档在这里:
psutil.cpu_percent(interval=None, percpu=False)
返回一个浮点数,以百分比形式表示当前系统范围的 CPU 利用率。当时间间隔 > 时,
0.0
比较时间间隔前后经过的系统 CPU 时间(阻塞)。当interval是0.0
或None
比较自上次调用或模块导入以来经过的系统CPU时间时,立即返回。这意味着第一次调用它时,它将返回一个无意义的0.0
值,您应该忽略它。在这种情况下,为了准确性,建议在0.1
调用之间至少间隔几秒来调用此函数。当 percpu 为 True 时,返回一个浮点数列表,表示每个 CPU 的利用率百分比。列表的第一个元素指第一个 CPU,第二个元素指第二个 CPU,依此类推。列表的顺序在调用之间是一致的。警告:第一次调用此函数时要使用 interval =
0.0
,否则None
它将返回一个0.0
您应该忽略的无意义的值。