2016-04-04 43 views
1

我在啓動時運行一個腳本,並持續每秒用Python編寫。它可以在有限的時間內正常工作(似乎變化~5/10分鐘),然後產生以下錯誤波紋管。Python socket.timeout

我還沒有嘗試改變睡眠時間,因爲這是一個「測試」腳本,但我將使用必須每秒運行的腳本,以便試圖找到正確的方式來做到這一點。

谷歌似乎對答案的方式很少,也許我使用了錯誤的術語,但我不確定它的睡眠時間可能是ping 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> 

錯誤時,拋出後運行一段時間

[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

你的問題似乎與缺乏連接有關,這可能是2個問題之一:代理或缺乏來自目標服務器的響應。第一個問題與python中的腳本不使用機器上的憑證有關,因此,如果你有自己的代理,它將不會進行身份驗證並提供錯誤。 –

+0

那麼沒有代理設置或使用如此的目標服務器問題。原因是什麼?這是谷歌的知識產權,所以我使用它,因爲它的大小不會造成問題。 –

+0

那麼,你完全確定你所使用的網絡不需要代理嗎?因爲這是企業網絡中非常普遍的問題。 –

回答

1

Tr的y這:

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在幾秒鐘內收到一個參數,爲什麼你要等待1000秒? –

+0

看起來像JQuery'1000'呃?哈,讓我試試看。 –

+1

我把它固定到只有5秒鐘,這對於網絡在連接之間稍微喘息一點來說應該是個好時機。 –