我有一个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:超时
答案 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()