+ -
当前位置:首页 → 问答吧 → 两个小问题

两个小问题

时间:2011-11-02

来源:互联网

这是一个检测服务器某协议运行情况的脚本(地址账户密码等用“*”掩盖):
Python code

#coding:gb2312
import urllib,smtplib

def get_val(): #获取协议运行值
    url = 'http://*.*.*.*:8161/admin/topics.jsp'
    lines = urllib.urlopen(url).readlines()
    n = lines.index('1009_1</a></td>\n')
    val = lines[n+1].replace('<td>','').replace('</td>\n','')

    if val == '1':
        return 1      #返回1表示运行正常
    elif val == '0':
        return 0      #返回2表示服务停止
    else:
        return -1     #返回-1表示未知错误

def sendmail(): #向管理员发送邮件,报告异常
    fromaddr = '****@***.com'
    toaddrs = fromaddr
    pws='*****'

    Subject = '**网关异常'
    Content = '检测到协议号1009_1值为0,请重新启动该服务'

    msg = '\n'.join(['From:%s'%fromaddr,'To:%s'%toaddrs,'Subject:%s'%Subject,Content])
    server = smtplib.SMTP('smtpcom.*.com','25')
    server.login(fromaddr,pws)
    server.sendmail(fromaddr,toaddrs,msg)
  
if __name__ == '__main__':
    if get_val() == 0:
        sendmail()

两个问题:
1.收到的邮件中文都被显示为乱码,不管是在网页还是在foxmial里面,我对编码的概念比较模糊;
2.能不能把这个脚本做成windows服务:循环执行get_val(),一旦发现它返回0,立即发送邮件给管理员?用什么办法做,需要编译成exe么?

作者: JacksonLv   发布时间: 2011-11-02

用死循环运行检测
Python code

if __name__ == '__main__':
    while 1:
        # 检测到就发邮件,最好加个flag,免得服务挂了,不停发邮件




带中文的信息要编码为utf8,从我的代码里抠出来的
Python code
msg.decode('cp936').encode('utf8')

作者: libralibra   发布时间: 2011-11-02