当终端应该使用python循环连续打印时,它停止打印
我已经编写了一个python脚本,可以自动检查internet是否可用,并使用我的学生帐户登录,以及在发现与internet失去连接时重新启动ngrok。我在安装了Ubuntu 14.04的笔记本电脑上运行这些脚本 python脚本如下所示:当终端应该使用python循环连续打印时,它停止打印,python,linux,bash,terminal,ubuntu-14.04,Python,Linux,Bash,Terminal,Ubuntu 14.04,我已经编写了一个python脚本,可以自动检查internet是否可用,并使用我的学生帐户登录,以及在发现与internet失去连接时重新启动ngrok。我在安装了Ubuntu 14.04的笔记本电脑上运行这些脚本 python脚本如下所示: #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os import urllib import http from urllib.request import urlopen import htt
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import os
import urllib
import http
from urllib.request import urlopen
import http.cookiejar
import time
import urllib.request, urllib.parse, urllib.error
import urllib.request, urllib.error, urllib.parse
def is_online():
"""check net available"""
pattern = "location.href='http://210.77.16.21:80"
with urlopen('http://www.baidu.com') as fh:
data = fh.read().decode()
if len(data) < 500 or pattern in data:
return False
else:
return True
def login(user, password):
login_url = 'http://210.77.16.21/eportal/InterFace.do?method=login'
login_data = {
'userId': user,
'password': password,
'service': '',
'queryString': 'wlanuserip=0bc386d9e643d188b011a0d00c9b5c40&wlanacname=5fcbc245a7ffdfa4&ssid=&nasip=2c0716b583c8ac3cbd7567a84cfde5a8&mac=53ba540bde596b811a6d5617a86fa028&t=wireless-v2&url=2c0328164651e2b4f13b933ddf36628bea622dedcc302b30',
'operatorPwd': '',
'validcode': ''
}
login_data = urllib.parse.urlencode(login_data)
cookie = http.cookiejar.CookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
request = urllib.request.Request(url=login_url, data=login_data.encode())
response = urllib.request.urlopen(request)
html = response.read().decode()
logined = True
if "success" in html:
pass
else:
logined = False
return logined
if __name__ == '__main__':
while True:
print (time.strftime('%l:%M%p %Z on %b %d, %Y'))
if is_online():
print ("++++++++++ you have already been online ++++++++++\n")
else:
print ("---------- you have lost net connection ----------\n")
os.system('sudo hclient -r -v eth0')
os.system('sudo dhclient -v eth0')
login('username', 'password')
os.system('./ngrok.sh')
time.sleep(20)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
keshawn 26339 0.0 0.1 59360 15656 pts/0 S+ 00:00 0:00 python3 ./net.py
在终端中运行python3./net.py
时,它应该每20秒连续打印一次信息
然而,有线的情况是,终端会在一段时间后停止打印,并卡在这里:
12:17AM CST on Aug 06, 2017
++++++++++ you have already been online ++++++++++
12:18AM CST on Aug 06, 2017
++++++++++ you have already been online ++++++++++
12:18AM CST on Aug 06, 2017
++++++++++ you have already been online ++++++++++
12:18AM CST on Aug 06, 2017
++++++++++ you have already been online ++++++++++
12:19AM CST on Aug 06, 2017
++++++++++ you have already been online ++++++++++
12:19AM CST on Aug 06, 2017
错误似乎发生在打印(time.strftime(“%l:%M%p%Z,在%b%d,%Y'))的第行之后。
我已经测试了两次,第一次在运行大约12小时后卡住,第二次在不到20分钟的时间内卡住
我还使用命令pa-aux | grep python3
检查了python脚本状态,如下所示:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import os
import urllib
import http
from urllib.request import urlopen
import http.cookiejar
import time
import urllib.request, urllib.parse, urllib.error
import urllib.request, urllib.error, urllib.parse
def is_online():
"""check net available"""
pattern = "location.href='http://210.77.16.21:80"
with urlopen('http://www.baidu.com') as fh:
data = fh.read().decode()
if len(data) < 500 or pattern in data:
return False
else:
return True
def login(user, password):
login_url = 'http://210.77.16.21/eportal/InterFace.do?method=login'
login_data = {
'userId': user,
'password': password,
'service': '',
'queryString': 'wlanuserip=0bc386d9e643d188b011a0d00c9b5c40&wlanacname=5fcbc245a7ffdfa4&ssid=&nasip=2c0716b583c8ac3cbd7567a84cfde5a8&mac=53ba540bde596b811a6d5617a86fa028&t=wireless-v2&url=2c0328164651e2b4f13b933ddf36628bea622dedcc302b30',
'operatorPwd': '',
'validcode': ''
}
login_data = urllib.parse.urlencode(login_data)
cookie = http.cookiejar.CookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
request = urllib.request.Request(url=login_url, data=login_data.encode())
response = urllib.request.urlopen(request)
html = response.read().decode()
logined = True
if "success" in html:
pass
else:
logined = False
return logined
if __name__ == '__main__':
while True:
print (time.strftime('%l:%M%p %Z on %b %d, %Y'))
if is_online():
print ("++++++++++ you have already been online ++++++++++\n")
else:
print ("---------- you have lost net connection ----------\n")
os.system('sudo hclient -r -v eth0')
os.system('sudo dhclient -v eth0')
login('username', 'password')
os.system('./ngrok.sh')
time.sleep(20)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
keshawn 26339 0.0 0.1 59360 15656 pts/0 S+ 00:00 0:00 python3 ./net.py
那么,有人能找出为什么会发生这种奇怪的现象吗?您可以在
urlopen()
中添加一个超时,因为它可能会挂起。特别是,邪恶的大学wifi经常导致路由问题,表现为挂起。@Gribouillis,谢谢,它可以工作。我已经推上了完整的脚本,希望它能为以后遇到这个问题的人提供参考。