Найти - Пользователи
Полная версия: Подскажите, как побороть urllib2.URLError: <urlopen error
Начало » Web » Подскажите, как побороть urllib2.URLError: <urlopen error
1
sinus
Доброго дня всем.
пытаюсь написать скрипт, который бы менял значение динамического IP в файлах конфигурации BIND под WinXP.
Споткнулся на ошибке - при пропадании ADSL более полуминуты - скрипт останавливается по timeout, выдавая сообщение urllib2.URLError: <urlopen error…
Подскажите, как изменить код, чтобы при пропадании связи скрипт писал в лог сообщение и шел на новый круг опроса после запланированной паузы?

# начинаем цикл проверки внешнего ip
while True:
bind_reload = 0

# запрашиваем наш внешний IP
strURL = 'http://api.wipmania.com/'
f_url = urllib2.urlopen(urllib2.Request(strURL))
response = f_url.read()
outerIP = response.split("<br>")[0] # запомнили значение внешнего ip
f_url.close()
#
print ("Внешний ip " + outerIP)# отладочное

# читаем из файла ip предыдущего цикла
f_old_ip = open("data_ip.txt", "r")
old_ip=f_old_ip.read()
f_old_ip.close()
#
print ("записанный в файле ip: " + old_ip)# отладочное
#------------------------------------------
# сравниваем значения ip
if outerIP == old_ip:
print 'совпали'# отладочное
print (time.strftime(segodn))# отладочное
# пишем в лог о совпадении
f_log = open("storozh_ip.log", "a")
f_log.write(time.strftime(d_t) + outerIP + ' :: OK\n')
f_log.close()
# пауза 15 сек
time.sleep(15)
continue
#---------------------------------------
nuklea
http://docs.python.org/tutorial/errors.html
sinus
nuklea
http://docs.python.org/tutorial/errors.html
За ссылку спасибо, таких листингов в сети нашел уже немало, да вот в том то и дело, что не соображу, как это связать с тем кодом, который я привел…

Пробовал запихать весь этот блок кода в конструкцию вида:

while True:
try:
[
Block koda
]
break
except ValueError:

тогда не получается бесконечный цикл для всей программы,
а мне нужно, чтобы она круглосуточно отслеживала внешний IP и при его изменении проделывала ряд операций.

Причем все остальное уже сделано, застрял на обработке ошибки…
nuklea
try:
f_url = urllib2.urlopen(urllib2.Request(strURL))
except urllib2.URLError:
print('log log log')
continue # возвращаемся к while
sinus
nuklea
try:
f_url = urllib2.urlopen(urllib2.Request(strURL))
except urllib2.URLError:
print('log log log')
continue # возвращаемся к while
Ага, не весь блок, а только обращение к урлу…
Тогда значит паузу еще одну перед continue вставить…

Попробую, спасибо…
sinus
Все получилось, благодарю.
Уже пять часов скрипт стабильно работает в качестве системного сторожа для BINDа .
Надеюсь и дальше будет без сбоев.

Еще раз спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB