2015-06-03 2 views
4

Я пытаюсь сделать скрипт python (бесконечный цикл) работать каждый день с 9 утра до 23.00, и это снова и снова. Я сделал некоторые исследования и придумали этот код в конце:Сделать скрипт python каждый день в определенные часы

while True: 
    if dt.now().hour in range(9, 23): 
     if __name__ == "__main__": 

      """ Not important """ 

      while True: 
       try: 
        """ bet_automation contains all the necessary code """ 

        bet_automation() 

       except Exception as ex: 

        """ Catch all the error of bet_automation() and restart program """ 

        print_error(ex) 
        time.sleep(5) 
        if not isinstance(ex, LoginTimeoutException): 
         try: 
          driver = get_driver() 
          filename = str(time.time()) 
          driver.get_screenshot_as_file("errors/{}.png".format(filename)) 
          with io.open("errors/{}.html".format(filename)) as f: 
           f.write(unicode(driver.page_source)) 
         except: 
          pass 
        try: 
         quit_driver() 
        except: 
         pass 

    else: 
     sys.exit(0) 

Благодаря этому, скрипт удается начать в 20.00 и работает правильно. Даже если я запускаю его раньше, он только начинает работать в 20.00, что отлично, но он не заканчивается на 21, что путает.

Я хорошо знаю, что это, вероятно, очень простой и немой вопрос, но, как я уже сказал, я начинающий. У меня был этот скрипт, запрограммированный «профессиональным» программистом, и я пытаюсь его отредактировать и улучшить, и я хотел бы сделать это сам, чтобы понять весь процесс.

Каждый прозрение высоко ценится,

Большое спасибо,

:)

+0

Бесконечный цикл вложен в другой бесконечный цикл? звучит опасно – ZdaR

+2

Используйте http://en.wikipedia.org/wiki/Cron – konart

+0

Ваш код говорит 9:00 -> 23:00, но в вашем описании упоминается 20:00 и 21:00. Что он? Или я неправильно понял? – clesiemo3

ответ

0

Ваш код содержит две петли. Прежде всего, внешний цикл. Это в основном не имеет значения; если вы запустите программу где-то между 9:00 и 23:00, то dt.now().hour in range(9, 23) будет оцениваться до True, поэтому код войдет во внутренний (бесконечный) цикл. Если условие оценивается до False, программа выйдет. Таким образом, тело внешнего контура будет выполняться только один раз.

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

Если вы хотите, чтобы код, чтобы остановить в какой-то момент, вы должны построить в проверке текущего времени внутри внутренней петли, например, так:

while True: 
    try: 
     bet_automation() 
     if dt.now().hour not in range(9, 23): 
      break 
(...)