2016-04-04 1 views
1

Ich führe ein Skript beim Booten und kontinuierlich jede Sekunde in Python geschrieben. Es funktioniert gut für eine begrenzte Zeit (scheint variieren ~ 5/10 Minuten) und dann produziert den folgenden Fehler unten.Python socket.timeout

Ich habe nicht versucht, die Ruhezeit zu ändern, da dies ein "Test" -Skript ist, aber ich werde Skripte verwenden, die jede Sekunde ausgeführt werden müssen, um den richtigen Weg zu finden.

Google scheint wenig Antworten zu liefern, vielleicht verwende ich die falschen Begriffe, aber ich bin mir nicht sicher, ob es die Schlafzeit ist möglicherweise ein Fehler beim Pingen der IP?

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> 

Fehler ausgelöst Nach längerem RUNNING

[email protected]:~ $ sudo python /home/pi/Desktop/wifi.py 
Traceback (most recent call last): 
    File "/home/pi/Desktop/wifi.py", line 17, in <module> 
    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 
+0

Ihr Problem scheint Mangel an Verbindung verbunden zu sein, die eine der zwei Fragen sein könnten: Proxy oder fehlende Ansprechbarkeit von dem Zielserver. Das erste Problem hängt mit der Tatsache zusammen, dass ein Skript in Python die Anmeldeinformationen auf dem Computer nicht verwendet. Wenn Sie also einen Proxy auf Ihrem Weg haben, wird er sich nicht authentifizieren und den Fehler geben. –

+0

Nun kein Proxy-Setup oder so Zielserver-Problem verwendet. Was wäre der Grund? Das ist die IP für Google, daher habe ich davon ausgegangen, dass Google aufgrund der Größe von Google keine Probleme verursachen würde. –

+0

Sind Sie also absolut sicher, dass das von Ihnen verwendete Netzwerk keinen Proxy benötigt? Weil dies ein sehr häufiges Problem in Unternehmensnetzwerken ist. –

Antwort

1

Tr y dies:

import time, urllib2 

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


while True: 
    output = internet_on() 
    with open('/var/www/html/viv/wifiout.html', 'w') as f: 
     f.write(output) 
    time.sleep(5) 
+0

time.sleep dauert ein Argument in Sekunden, warum warten Sie 1000 Sekunden? –

+0

Sieht aus wie JQuery '1000' eh? Ha OK, lass es mich ausprobieren. –

+1

I juat auf nur 5 Sekunden fixiert, was eine gute Zeit für das Netzwerk sein sollte, ein wenig zwischen den Verbindungen zu atmen. –