每隔X秒运行一次Python脚本

时间:2016-04-04 12:47:53

标签: jquery python html

我有一个Python脚本,可以在启动时正常运行,以检测wifi连接的状态,并根据脚本结果将HTML IMG标记写入文件。

我想让它“不断”运行,我知道这可以通过使用CRON作业来实现,但最常用的脚本运行时间为1分钟,我想知道结果发生变化的几秒钟内。

我已经尝试过波纹管代码的许多变体,但它似乎从来没有运行过。 (我删除了WiFi加密狗,它应该更改。如果我删除它并重新启动,则会显示正确的结果。)

PYTHON:

import time, urllib2

def internet_on():
    try:
        response=urllib2.urlopen('http://64.233.160.94',timeout=1)
        return '<img class="right" src="networkon.png" width="32" height="32">'
    except urllib2.URLError as err: pass
    return '<img class="right" src="networkoff.png" width="32" height="32">'

output = internet_on()    
f = open('/var/www/html/viv/wifiout.html', 'w')
print >> f, output
f.close()

time.sleep(1)

while True:
    internet_on()

HTML:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vivarium Enviroment Control Centre</title>
<link rel="stylesheet" href="style.css">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script type="text/javascript">
    function updateTime() {
        var currentTime = new Date();
        var hours = currentTime.getHours();
        var minutes = currentTime.getMinutes();
        var seconds = currentTime.getSeconds();
        if (minutes < 10){
            minutes = "0" + minutes;
        }
        if (seconds < 10){
            seconds = "0" + seconds;
        }
        var v = hours + ":" + minutes + ":" + seconds + " ";
        if(hours > 11){
            v+="PM";
        } else {
            v+="AM"
        }
        setTimeout("updateTime()",1000);
        document.getElementById('time').innerHTML=v;
    }

  $("document").ready(function(){
        updateTime();

        setInterval(function(){
          $("#wifi").load('wifiout.html');
        },1000);
      });

function changeStatus() {
    var image = document.getElementById('lightStatus');
    if (image.src.match("lightoff")) {
        image.src = "lighton.png";
    } else {
        image.src = "lightoff.png";
    }
}
</script>
</head>
<body>
<div id="topbar">
    <span id="time"></span>
    <span id="wifi"></span>
    <img id="lightStatus" class="right" onclick="changeStatus()" src="lightoff.png" width="32" height="32">
</div>
</body>
</html>

在应用接受的答案后跑步时出现错误

  

pi @ Vivarium:〜$ sudo python /home/pi/Desktop/wifi.py   Traceback(最近一次调用最后一次):     文件“/home/pi/Desktop/wifi.py”,第17行,in       internet_on()     在internet_on中输入“/home/pi/Desktop/wifi.py”,第8行       urllib2.urlopen( 'http://64.233.160.94',超时= 1)     在urlopen中输入文件“/usr/lib/python2.7/urllib2.py”,第154行       return opener.open(url,data,timeout)     文件“/usr/lib/python2.7/urllib2.py”,第437行,处于打开状态       response = meth(req,response)     在http_response中输入文件“/usr/lib/python2.7/urllib2.py”,第550行       'http',请求,响应,代码,消息,hdrs)     文件“/usr/lib/python2.7/urllib2.py”,第469行,出错       result = self._call_chain(* args)     文件“/usr/lib/python2.7/urllib2.py”,第409行,在_call_chain中       result = func(* args)     在http_error_302中输入文件“/usr/lib/python2.7/urllib2.py”,第656行       return self.parent.open(new,timeout = req.timeout)     文件“/usr/lib/python2.7/urllib2.py”,第437行,处于打开状态       response = meth(req,response)     在http_response中输入文件“/usr/lib/python2.7/urllib2.py”,第550行       'http',请求,响应,代码,消息,hdrs)     文件“/usr/lib/python2.7/urllib2.py”,第469行,出错       result = self._call_chain(* args)     文件“/usr/lib/python2.7/urllib2.py”,第409行,在_call_chain中       result = func(* args)     在http_error_302中输入文件“/usr/lib/python2.7/urllib2.py”,第656行       return self.parent.open(new,timeout = req.timeout)     文件“/usr/lib/python2.7/urllib2.py”,第431行,处于打开状态       response = self._open(req,data)     在_open中输入文件“/usr/lib/python2.7/urllib2.py”,第449行       '_open',req)     文件“/usr/lib/python2.7/urllib2.py”,第409行,在_call_chain中       result = func(* args)     在http_open中输入文件“/usr/lib/python2.7/urllib2.py”,第1227行       return self.do_open(httplib.HTTPConnection,req)     在do_open中输入文件“/usr/lib/python2.7/urllib2.py”,第1200行       r = h.getresponse(buffering = True)     在getresponse中输入文件“/usr/lib/python2.7/httplib.py”,第1073行       response.begin()     文件“/usr/lib/python2.7/httplib.py”,第415行,开头       版本,状态,原因= self._read_status()     文件“/usr/lib/python2.7/httplib.py”,第371行,在_read_status中       line = self.fp.readline(_MAXLINE + 1)     在readline中文件“/usr/lib/python2.7/socket.py”,第476行       data = self._sock.recv(self._rbufsize)   socket.timeout:超时

3 个答案:

答案 0 :(得分:3)

我认为你的问题是你没有在循环中编写新的HTML,只在最初运行脚本时才编写一次。试试这样的事情

public void onSuccess(string response) 
{
                try {
                        String s = new String(response);
                        JSONObject jsonObject = new JSONObject(s);

                       if (jsonObject.has("data")) {
                           JSONArray country =jsonObject.getJSONArray("data");
                           for (int i = 0; i < country.length(); i++) {
                            JSONObject cnt = country.getJSONObject(i);
                            String res=cnt.getString("username"));
                           //now you can use res as per your requirement
                        }
                    } catch (JSONException e) {
                   e.printStackTrace();
                } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }

答案 1 :(得分:2)

是的,你只是运行代码的后半部分(从第一次分配输出到time.sleep(1),其余的时间都是因为它&#39;不在函数定义下。将所有代码移动到函数下面。无需返回任何内容,只需在函数中执行所有操作。如果您执行一次,Time.sleep(1)只需一秒钟每分钟使它成为60。

import time, urllib2

def internet_on():
    try:
        response=urllib2.urlopen('http://64.233.160.94',timeout=1)
        output = '<img class="right" src="networkon.png" width="32" height="32">'
    except urllib2.URLError as err: pass
    output = '<img class="right" src="networkoff.png" width="32" height="32">'


    f = open('/var/www/html/viv/wifiout.html', 'w')
    print >> f, output
    f.close()
    time.sleep(60)

while True:
    internet_on()

答案 2 :(得分:0)

试试这个。只需将脚本放在自动启动上,然后在无限循环中调整time.sleep。

import time, urllib2

def internet_on():
    try:
        response=urllib2.urlopen('http://64.233.160.94',timeout=10)
        return '<img class="right" src="networkon.png" width="32" height="32">'
    except urllib2.URLError as err:
        return '<img class="right" src="networkoff.png" width="32" height="32">'

output = internet_on()
f = open('/var/www/html/viv/wifiout.html', 'w')
print >> f, output
f.close()


while True:
    time.sleep(30)
    internet_on()