Run Python Script every X seconds

Sauced Apples

I have a Python script that runs fine on boot to detect the status of a wifi connection and write an HTML IMG tag to file dependent on the script result.

I want this to run "constantly" and I know this can be acheived by using a CRON job but the most frequent running of the script would be 1 min and I would like to know within seconds of the result changing.

I have tried many variations of the bellow code but it dosen't ever seem to run. (I remove the WiFi dongle and it should change. If I remove it and reboot the correct result is displayed.)

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>

ERROR THROWN AFTER RUNNING FOR A WHILE APPLYING THE ACCEPTED ANSWER

pi@Vivarium:~ $ sudo python /home/pi/Desktop/wifi.py Traceback (most recent call last): File "/home/pi/Desktop/wifi.py", line 17, in internet_on() File "/home/pi/Desktop/wifi.py", line 8, in internet_on urllib2.urlopen('http://64.233.160.94',timeout=1) File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen return opener.open(url, data, timeout) File "/usr/lib/python2.7/urllib2.py", line 437, in open response = meth(req, response) File "/usr/lib/python2.7/urllib2.py", line 550, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python2.7/urllib2.py", line 469, in error result = self._call_chain(*args) File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 656, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "/usr/lib/python2.7/urllib2.py", line 437, in open response = meth(req, response) File "/usr/lib/python2.7/urllib2.py", line 550, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python2.7/urllib2.py", line 469, in error result = self._call_chain(*args) File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 656, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "/usr/lib/python2.7/urllib2.py", line 431, in open response = self._open(req, data) File "/usr/lib/python2.7/urllib2.py", line 449, in _open '_open', req) File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 1227, in http_open return self.do_open(httplib.HTTPConnection, req) File "/usr/lib/python2.7/urllib2.py", line 1200, in do_open r = h.getresponse(buffering=True) File "/usr/lib/python2.7/httplib.py", line 1073, in getresponse response.begin() File "/usr/lib/python2.7/httplib.py", line 415, in begin version, status, reason = self._read_status() File "/usr/lib/python2.7/httplib.py", line 371, in _read_status line = self.fp.readline(_MAXLINE + 1) File "/usr/lib/python2.7/socket.py", line 476, in readline data = self._sock.recv(self._rbufsize) socket.timeout: timed out

John

I think your problem is that you're not writing the new HTML in the loop, you only write it once when you initially run the script. Try something like this

import time, urllib2

HTML = '<img class="right" src="{}" width="32" height="32">'

def internet_on():

    try:
        urllib2.urlopen('http://64.233.160.94',timeout=1)
        status_image = 'networkon.png'
    except urllib2.URLError as err:
        status_image = 'networkoff.png'

    with open('/var/www/html/viv/wifiout.html', 'w') as f:
        f.write(HTML.format(status_image))

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

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Run Python script every 10 seconds

From Dev

Run certain code after x seconds, every n seconds in python

From Dev

Run certain code after x seconds, every n seconds in python

From Dev

Using Ajax to run a php script every X seconds

From Dev

run code every X seconds

From Dev

Run a loop every x seconds in python in order to scrap a website

From Dev

run php script every 10 seconds

From Java

flutter run function every x amount of seconds

From Java

Angular 6 run a function in every X seconds

From Dev

Executor service to run every x seconds

From Dev

Django - run a function every x seconds

From Dev

Jquery: run function only every x seconds

From Dev

Run a Python function for x seconds?

From Dev

how to execute python script every 1556 seconds

From Dev

Rufus Scheduler: run every x seconds with first run immediately

From Dev

Python Daemon, repeat function every x seconds

From Dev

How to repeatedly run bash script every N seconds?

From Dev

How to run a thread every x seconds without using timer control

From Dev

Query about a script that makes webcam take an image every x seconds

From Dev

PHP to run jquery script every 'x' minutes

From Dev

Python: Run loop every second and trigger function for 5 seconds

From Dev

Run php script in exactly x seconds from now

From Dev

Scheduling Python Script to run every hour accurately

From Dev

Run function every 10 seconds

From Dev

Run function every 3 seconds

From Dev

Make API request every x seconds in Python 3

From Dev

updating state every x seconds

From Dev

Java Timer Every X Seconds

From Dev

Executing code every x seconds