Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2015 21:04:12

ubomj
Зарегистрирован: 2015-08-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Перезапуск скрипта при падении

Добрый день всем.
Помогите допилить скрипт пожалуйста

Имеется скрипт постинга картинок в группу ВК

#!C:\Python27\python
# -*- coding: utf-8 -*-
from __future__ import division
import time
import requests
import json
import random
import os
import os.path
vk_key = '5ec3e4d901fd32773f' # токен
group_id = 00000000 # ID паблика
if True:
	# post image
	import glob
	pics = glob.glob('pic\*')
	if len(pics) == 0:
		exit()
	pic2post = random.choice(pics)
	url = 'https://api.vk.com/method/photos.getWallUploadServer?group_id=%d&v=5.28&access_token=%s' %(group_id, vk_key)
	resp = requests.get(url).json()['response']
	upload_url = resp['upload_url']
	files = {'file1': open(pic2post,'rb')}
	resp = requests.post(upload_url, files=files)
	resp = resp.json()
	server = resp['server']
	photo = resp['photo']
	hash = resp['hash']
	time.sleep(0.4)
	url = 'https://api.vk.com/method/photos.saveWallPhoto?group_id=%s&server=%s&photo=%s&hash=%s&v=5.28&access_token=%s' %(group_id, server, photo, hash, vk_key)
	resp = requests.get(url).json()['response']
	resp = resp[0]
	photo_id = resp['id']
	owner_id = resp['owner_id']
	atts = 'photo%s_%s' %(owner_id, photo_id)
	time.sleep(0.4)
	url = 'https://api.vk.com/method/wall.post?owner_id=%s&from_group=1&attachments=%s&v=5.28&access_token=%s' %(-group_id, atts, vk_key)
	resp = requests.get(url).json()['response']
	files = 0
	os.system('del %s' %pic2post)

Все вроде работает, но бывает что интернет моргнул или вк не все принял… и получается, что скрипт просто закрывается…

Как сделать перезапуск при таких ошибках.. ?

Отредактировано ubomj (Авг. 14, 2015 22:43:20)

Офлайн

#2 Авг. 14, 2015 22:56:18

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Перезапуск скрипта при падении

Сохранять состояние и ловить исключения.

Офлайн

#3 Авг. 14, 2015 22:59:57

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Перезапуск скрипта при падении

ubomj
Как сделать перезапуск при таких ошибках.. ?
Запилить код в таск и добавить в очередь.

Не мучайся, пользуйся smart-post.ru



Отредактировано Budulianin (Авг. 14, 2015 23:01:02)

Офлайн

#4 Авг. 15, 2015 00:50:46

ubomj
Зарегистрирован: 2015-08-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Перезапуск скрипта при падении

Shaman
Сохранять состояние и ловить исключения.
Ну это понятно…
А вот как сделать исключением *забаненый аккаунт*, *не правильный пароль* и *лимит постов в группе*?

#подгрузка данных
while True:
	try:
		#тело скрипта
		
	except:
		pass

Сейчас такая структура получилась…

Отредактировано ubomj (Авг. 15, 2015 00:51:04)

Офлайн

#5 Авг. 15, 2015 08:28:32

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Перезапуск скрипта при падении

ubomj
А вот как сделать исключением *забаненый аккаунт*, *не правильный пароль* и *лимит постов в группе*?
Можно так:
class BannedAccount(Exception):
    pass
 
def attempts(tries=3, delay=0.1, exception=Exception):
    def deco(func):
        def wrap(*args, **kwargs):
            from time import sleep
            for t in xrange(tries, 0, -1):
                try:
                    return func(*args, **kwargs)
                except exception as e:
                    if t > 1:
                        sleep(delay)
                        continue
                    else:
                        raise e
        return wrap
    return deco
 
@attempts(5, 1, BannedAccount)
def foo():
    print 'Try'
    if 'BlahBlahBlah':
        raise BannedAccount('BlahBlahBlah')
 
foo()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version