OJ问题检测程序---python开发

原文链接:http://www.cnblogs.com/ma6174/archive/2012/03/23/2414218.html

懒人总是想方设法使自己更懒,特别是学计算机的孩纸。

    问题来源很简单,OJ评测程序有点问题,有时候不知到怎么回事就waiting了,一但waiting后面所有提交的代码就都waiting了, OJ就不能正常评测了,这时候就需要去服务器端解决问题。怎么解决评测问题不是本次讨论的重点,这里我们更关心的是如何及时发现问题。我们怎么发现问题呢?一般情况下,我们要打开OJ,找到状态页面,然后看看评判结果有没有waiting的,这样做的话,你就要过一段时间就打开页面一次,查看有没有出问题,麻烦!想过没有,一但OJ开始waiting了,你就收到一个短信,告诉你OJ出问题了,你就可以马上解决,这样多好啊。什么?不可能?一切都有可能!这两天学的可爱又强大的python就轻松解决了这个难题!

    上面说的有点绕,不知到什么是OJ的孩子更是一头雾水,简单点描述这个问题:一旦互联网上某个网站的页面上出现了某些文字,比如360的官网主页上出现了“金山好“三个字(开个玩笑),360肯定不想让那三个字出现在那里,但是,假如360网站被黑了(可能新几乎为0),360就要及时发现页面上的”金山好“三个字,怎么能及时发现呢?找个人一天不停的刷?不太现实。懒人们会去写一个程序,每隔一段时间(比如三分钟)就去检查一下页面上出没出现那三个字,如果出现了或者网站登不上了就可以立即收到通知。

   再或者说,如果你很关注某个网站,比如成绩查询网站,但你不知到什么时候可以开始查,你就可以写一个程序去检查,一旦网站有变动或者出现了某些关键字眼,如“学号”,“姓名”等,就意味着可以查了,第一时间获得通知是你最想要的,我们就可以写个程序实现。

   对于做ACM的孩纸,可能比较关注一些比赛,比如Codefroce,TopCoder,航电,浙大的比赛等,也可以用这种方式及时获取比赛信息,以免错过比赛!

   我写的程序是发送电子邮件,如果想第一时间收到通知的话,可以将电子邮件发送到你的移动139邮箱。139邮箱的最大亮点就是无限量免费短信提醒! 

   这个功能说起来也并不复杂,以我现在的能力,用C,C++肯定做不出来,java和C#也不会,刚学了一点python,感觉用python实现起来还是比较简单的。

   用python,一切都变得那么简单!越来越喜欢python了

   下面是我的代码,总共60多行,我也是初学python,这是我的第一个python实用程序,也是第一次接触网络方面的编程,欢迎大牛拍

# -*- coding: utf-8 -*-

#在某个网站上搜索指定字符串

def count_string(weburl,string_tobe_find):

    import urllib

    try:

        web = urllib.urlopen(weburl).read()

    except:

        return -1

    string = str(web)

    return string.count(string_tobe_find)



#发送邮件提醒管理员

def send_mail(sub,content):

    import smtplib

    from email.mime.text import MIMEText

    to_list=['XXXXX@XXX.com']

    mail_host="smtp.163.com"  #设置服务器

    mail_user="XXXXXXX"    #用户名

    mail_pass="XXXXXXX"   #口令

    mail_postfix="163.com"  #发件箱的后缀



    me="提醒"+"<"+mail_user+"@"+mail_postfix+">"

    msg = MIMEText(content,_subtype='plain',_charset='gb2312')

    msg['Subject'] = sub

    msg['From'] = me

    msg['To'] = ";".join(to_list)

    try:

        server = smtplib.SMTP()

        server.connect(mail_host)

        server.login(mail_user,mail_pass)

        server.sendmail(me, to_list, msg.as_string())

        server.close()

        return True

    except Exception, e:

        print str(e)

        return False



#检查函数,调用上面的函数

def check():

    import time

    status = count_string('http://acm.sdut.edu.cn/web/status.php',"waiting")

    if status == -1:

        print time.ctime(time.time()),"OJ页面无法打开","请检查问题"

        if send_mail("OJ页面无法打开","请检查问题!\n\tfrom ma6174") == False:

            print '邮件发送失败'

            return False

        time.sleep(600)

    elif status > 1 :

        print time.ctime(time.time()),"OJ又waiting了","请尽快修复"

        if send_mail("OJ又waiting了","请尽快修复!\n\tfrom ma6174") == False:

            print '邮件发送失败'

            return False

        time.sleep(600)

    else:

        print time.ctime(time.time()),"\tOJ运行正常!"



#主函数

if __name__=='__main__':

    print "\tOJ运行检查程序 --- BY ma6174"

    from time import sleep

    while True:

        check()
        sleep(60)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值