我为实践目的编写了以下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。 此外,我检查了一个浮点数和一个整数之间的布尔运算,我看到的并不奇怪。 你有什么主意吗 ?提前谢谢。
答案 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()