2015-06-27 3 views
1

У меня есть сценарий, который собирает данные из потокового API. Я получаю ошибку в случайном порядке, я полагаю, что она исходит из конца твиттера по любой причине. Это не происходит в определенное время, меня видели это уже через 10 минут после запуска моего скрипта, а иногда и через 2 часа.Перезапустить скрипт python

Мой вопрос заключается в том, как создать другой скрипт (за его пределами), который может поймать, если он завершен с ошибкой, а затем перезапустить после задержки.

Я сделал некоторые поисковые запросы и большинство из них были связаны с использованием bash on linux, я на окнах. Другие предложения заключались в использовании планировщика задач Windows, но это может быть установлено только для известного времени.

я наткнулся на следующий код:

import os, sys, time 

def main(): 
    print "AutoRes is starting" 
    executable = sys.executable 
    args = sys.argv[:] 
    args.insert(0, sys.executable) 

    time.sleep(1) 
    print "Respawning" 
    os.execvp(executable, args) 

if __name__ == "__main__": 
    main() 

Если я не ошибаюсь, что работает в коде правильно? Проблема с этим - мой скрипт в настоящее время собирает данные, и я не могу закончить редактирование.

+2

Можете ли вы _detect_, когда ваш скрипт идет не так? В этот момент вы можете создать исключение. – Rishav

+0

... и использовать навсегда? http://stackoverflow.com/questions/19571282/using-forever-js-with-python – JuanPablo

+0

У меня есть исключение, но оно не фиксирует эту ошибку, оно фиксирует ошибки после получения данных из API и работает для этого , Вот почему я считаю, что это может быть проблема связи между мной и твиттером. – Leb

ответ

2

Как насчет этого?

from os import system 
from time import sleep 

while True: #manually terminate when you want to stop streaming 
    system('python streamer.py') 
    sleep(300) #sleep for 5 minutes 

В то же время, когда что-то пойдет не так в streamer.py, конец его оттуда, вызывая sys.exit(1)

Убедитесь, что это и streamer.py находятся в том же каталоге.

+1

Я дам ему попробовать и обновить, когда поток закончится. – Leb

+0

@ Leb Это отдельный сценарий «контроллера». – Rishav

+0

В зависимости от того, что именно делает 'streamer.py', вы можете получить несколько экземпляров streamer.py. Кроме того, вам, возможно, придется подождать 5 минут, прежде чем вы обратитесь к ошибочному 'streamer.py' –