0

这是我的脚本,个人部分已被清除。

import urllib, urllib2, cookielib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
resp3 = opener.open('https://www.mynexia.com/login')
resp4 = resp3.read().split('input name=\"authenticity_token\" type=\"hidden\" value=\"')
resp5 = resp4[1].split('\" /></div>')
login = 'website username'
password = 'website pass'
authenticity_token = resp5
login_data = urllib.urlencode({'login' : login, 'password' : password,'authenticity_token' : authenticity_token})
opener.open('https://www.mynexia.com/session', login_data)
resp = opener.open('https://www.mynexia.com/houses/ourstaticaccountpage/climate')
resp1 = resp.read().split('<div class=\"temperature\"><span>')
resp2 = resp1[1].split('</span></div>')

int(resp2[0])


if resp2[0] > 75:

    import smtplib
    import string
    SUBJECT = "Temperature is rising!"
    TO = "helpdesk@whoever.blah"
    FROM = "me@gmail.com"
    text = "Temperature is " + resp2[0]
    BODY = string.join((
        "From: %s" % FROM,
        "To: %s" % TO,
        "Subject: %s" % SUBJECT,
        "",
        text
        ), "\r\n")
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login("me@gmail.com", "gmailpass")
    server.sendmail(FROM, [TO], BODY)

elif resp2[0] <= 75:

    import smtplib
    import string
    SUBJECT = "Temperature is ok"
    TO = "helpdesk@whereever.blah"
    FROM = "me@gmail.com"
    text = "Temperature is " + resp2[0]
    BODY = string.join((
        "From: %s" % FROM,
        "To: %s" % TO,
        "Subject: %s" % SUBJECT,
        "",
        text
        ), "\r\n")
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login("me@gmail.com", "gmailpass")
    server.sendmail(FROM, [TO], BODY)

它工作得很好,除了它总是评估它的价值resp2[0]> 75什么。这个脚本的目的是在一些敏感机器运行的房间温度超过 75 度时提醒我。我正在抓取的网站只允许您在超过 90 时发送警报。到那时我有机器出现故障的风险,所以我想早点提醒自己。我将每 15 分钟使用一次 cronjob 运行它,一旦我让 if-else 语句正常工作,我只会将 <= 转储到日志文件而不是发送“一切都是 -好的警报。” 关于我为什么在基础数学上失败的任何建议?我的有问题int(resp2[0])吗?默认情况下不是以 10 为基数吗?

4

2 回答 2

0

您是否尝试记录 resp2[0] 的值以查看您获得的值?一个简单的

print resp2[0]

调试时...

于 2012-03-21T20:51:59.730 回答
0

resp2是一个字符串列表。字符串大于整数。您需要int在比较之前调用它。

实际上,我看到你在打电话int- 但你没有对结果做任何事情。这样int(resp2[0])做不会将 的内容转换为resp2[0]整数。它只是返回转换后的值。如果你不把它分配给任何东西,它就会被扔掉。您需要将其分配给一个新变量,然后在您的if语句中使用该变量。

于 2012-03-21T20:46:33.687 回答