OJ問題檢測程式—python開發

來源:互聯網
上載者:User

    懶人總是想方設法使自己更懶,特別是學電腦的孩紙。

    問題來源很簡單,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了

   下面是My Code,總共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) 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.