Python代码的问题
下面是我用Python写的一段小代码,它被设置在定时任务中,每15分钟运行一次。这个代码的目的是检查我树莓派上CPU的温度,如果温度超过45摄氏度,就会发短信问我该怎么办。我知道我收到的温度值是正确的,因为它会在屏幕上显示出来。但是,我每15分钟都会收到一条短信,告诉我温度情况,即使温度其实是低于45度的。我知道问题可能出在我的条件判断上,但我对Python的语法还不太熟悉,搞不清楚哪里出错了。我尝试过用大于(>)和大于等于(>=)来比较45和45.0。
import os
import smtplib
import sys
# Return CPU temperature as a character string
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
# CPU informatiom
CPU_temp = getCPUtemperature()
if CPU_temp > 45.0:
fromaddr = 'xxxxxxxxxx@gmail.com'
toaddrs = 'xxxxxxxxxx@vtext.com'
msg = 'My current CPU temperature is %s degrees. Should I shutdown?' % (CPU_temp)
# Credentials (if needed)
username = 'xxxxxxxxxx'
password = 'xxxxxxxxxx'
# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
sys.exit()
else:
sys.exit()
3 个回答
0
这要看 getCPUtemperature()
返回的是什么。如果这个方法返回的是一个字符串,比如 "15",那么条件就会成立。
>>> "15" > 45.0
>>> True
>>> "64" > 45.0
>>> True
在判断条件之前,把 getCPUtemperature()
的返回值转换成 float
类型。
0
因为你返回的是一个字符串,所以需要把CPU_temp明确地转换成浮点数。你可以像这样转换:CPU_temp = float(CPU_temp)
,或者在比较的时候直接进行转换。下面是对发生情况的详细解释:
>>> CPU_temp = "53.1"
>>> if CPU_temp > 45.0:
print("True")
TypeError: unorderable types: str() > float()
>>> if float(CPU_temp) > 45.0:
print("True")
True
2
你不能把一个字符串(由 getCPUtemperature
返回)和一个浮点数 45.0
进行比较,试着把这个字符串转换成浮点数:
import os
import smtplib
import sys
# Return CPU temperature as a character string
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
# CPU informatiom
CPU_temp = getCPUtemperature()
if float(CPU_temp) > 45.0:
fromaddr = 'xxxxxxxxxx@gmail.com'
toaddrs = 'xxxxxxxxxx@vtext.com'
msg = 'My current CPU temperature is %s degrees. Should I shutdown?' % (CPU_temp)
# Credentials (if needed)
username = 'xxxxxxxxxx'
password = 'xxxxxxxxxx'
# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
sys.exit()
else:
sys.exit()