Python代码的问题

0 投票
3 回答
631 浏览
提问于 2025-04-18 01:25

下面是我用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()

撰写回答