脚本 - 检查CPU负载(Python)

时间:2017-05-01 06:24:33

标签: python

我为实践目的编写了以下python脚本,该脚本在处理器达到总使用量的50%时检查cpu负载。

import subprocess
import os

process1 = os.popen('cat /proc/cpuinfo | grep -c processor')
cmdread1 = process1.read()
process1.close()
num_of_procs = int(cmdread1)/2
print num_of_procs    # returns 1

process = os.popen('cat /proc/loadavg | awk \'{print $1}\'')
cmdread = process.read()
process.close()
cpu_usage = cmdread
print cpu_usage   # returns 0.15 or 0.xx (there is no load at the moment)
if cpu_usage>num_of_procs: # check if 0.15 is greater than 1 
   print "load!"
else:
   print "no load"

脚本始终返回“load”,这是false。 此外,我检查了一个浮点数和一个整数之间的布尔运算,我看到的并不奇怪。 你有什么主意吗 ?提前谢谢。

3 个答案:

答案 0 :(得分:1)

好像你忘了施放cpu_usage了。 在下面的示例中,所有必需变量都已转换为float

import subprocess
import os

process1 = os.popen('cat /proc/cpuinfo | grep -c processor')
cmdread1 = process1.read()
process1.close()
num_of_procs = float(cmdread1)/2.0
print (num_of_procs)    # returns 1

process = os.popen('cat /proc/loadavg | awk \'{print $1}\'')
cmdread = process.read()
process.close()
cpu_usage = float(cmdread)
print (cpu_usage)   # returns 0.15 or 0.xx (there is no load at the moment)
if cpu_usage>num_of_procs: # check if 0.15 is greater than 1 
   print ("load!")
else:
   print ("no load")

答案 1 :(得分:0)

cpu_usage是一个字符串,num_of_procs是一个Int。

所以当你这样做时:

if cpu_usage>num_of_procs:

它总是返回false

答案 2 :(得分:0)

cpu_usage是一个字符串,num_of_procs是一个整数。

在Python 2中,字符串和整数之间的比较会返回一个未定义的值,在您的情况下,cpython似乎总是返回True。

您应该将cpu_usage转换为数字,如下所示:

cpu_usage = float(cmdread)

为了避免这类错误,您还可以使用Python 3,其中比较类型之间没有有意义排序的类型会引发错误:

>>> '0.001' < 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()