#!/usr/bin/python
from urllib2 import urlopen, URLError
from subprocess import Popen
from time import sleep
from sys import argv
MAX_TRIES = 30
DELAY = 5
if len (argv) < 2:
print ('Check for network connectivity and run a command once the net is up')
print ('Tries up to %d times waiting %d seconds between each try' % (MAX_TRIES, DELAY))
print ('\nUSAGE: python waitfornet.py <command to run>')
else:
while True:
MAX_TRIES -= 1
if MAX_TRIES < 0:
raise ValueError ('Reached the max iteration count and the net is still down')
try:
data = urlopen('http://www.google.com')
except URLError:
# if there's a problem connecting to google, that must mean
# that the net is still down, so sleep 5 seconds and try again
print ('Internet is down... retrying...')
sleep (DELAY)
continue
# if you got here it means that the urlopen succeded
pid = Popen([argv[1], ' '.join(argv[1:])]).pid
break
显然这是 Empathy 中的一个已知错误,所以我决定从检查网络是否正常的脚本启动 Empathy(连接到http://www.google.com,互联网的真正心跳 :) 如果网络不工作,它将休眠 5 秒并重试,直到尝试 30 次
这是脚本(名为waitfornet.py)
这就是我从“启动应用程序”菜单启动它的方式:
听起来 Empathy 可能需要一个补丁来在内部做这种事情。但是您应该能够通过断开与网络的连接并重新连接来让 Empathy 做正确的事情。
我似乎遇到了 Empathy 在不同时间拒绝连接到一堆网络的错误。但它应该倒计时“将在 X 秒内重试”。
但这需要代码,如果您需要,则需要提交错误报告。
我专门编写了一个脚本来解决这个问题。这个脚本(基于python和D-Bus)每次网络在线时都会将empathy连接到网络。即使连接断开并重新连接,脚本也会自动重新连接移情。
希望你会喜欢它。如果您需要任何改进,请发表评论。