(Python Расписание) Изменение времени выполнения запланированного события на основе файла CSV - PullRequest
0 голосов
/ 03 февраля 2020

Примечание: я новичок в ТАК, поэтому извиняюсь за любые ошибки. Я сделал несколько проектов в Python раньше.

Программа

По сути, программа уведомляет пользователя об определенных конкретных c разах на основе заранее определенного расписания, хранящегося в CSV-файле. Время меняется каждый день (что представляет проблему, о которой я расскажу позже). CSV-файл выглядит следующим образом:

Дата, День, Столбец1, Восход солнца, Столбец3, Столбец4 и т. Д. c

3, Понедельник, Значение1,07: 54, Значение3, Значение4

В этом примере я буду использовать Sunrise на протяжении всего прохождения программы.

У меня есть функция с именем get_today_times () , которая ответственна за чтение CSV и возвращение списка с именем time:

def get_today_times():
  #code goes here
  return times

Затем существует другая функция, которая получает время из вышеуказанной функции:

def get_sunrise():
  times = get_today_times():
  sunrise_time = times[3]

  final_string = "Sunrise is at" + sunrise_time

  return sunrise_time, final_string

Затем указанная выше функция вызывается в настройке функция:

def setup():
   sunrise_time, sunrise_string = get_sunrise()
   schedule_list = [sunrise_time, other variables following the same flow]
   output_list = [sunrise_string, other variables following the same flow] 

   return schedule_list, output_list

Затем данные отправляются на диск-диск с помощью веб-крюка:

def sunrise_discord():
   notify_discord(final_string)
   #The notify_discord function sends it to a discord server using a webhook

Все вышеперечисленное запланировано с использованием расписание (https://pypi.org/project/schedule/) как таковой:

if __name__ == "__main__":

   schedule_list, output_list = setup()

   schedule.every().day.at(schedule_list[0]).do(sunrise_discord)

   while True:
      schedule.run_pending()
      time.sleep(1)

Проблема

Насколько я понимаю, код запускается с начала if __name__ до тех пор, пока l oop, который постоянно работает. Следовательно, это означает, что время отправки сообщений разногласий остается одинаковым каждый день и приводит к появлению сообщения, такого как:

(отправлено в 07:54) Восход солнца в 08: 13

Расписание также не позволяет запланированной функции возвращать значение, такое как:

#DOES NOT WORK
schedule_list, output_list = schedule.every().day.at("00:00").do(setup)

Я пытался это сделать:

Python возвращаемое значение из запланированного событие

, но у меня это не сработало: / Я думаю, что разница между приведенной выше ссылкой и моим сценарием заключается в том, что мне нужно напрямую изменить время, на которое запланированы события запустите.

Я попытался добавить следующий фрагмент кода, но он все еще не работал:

while True:
        schedule.run_pending()
        time.sleep(1)

        if time.localtime().tm_hour == 00:
            if time.localtime().tm_min == 00:
                schedule_list, output_list = setup()

Приведенный выше фрагмент кода должен перезапустить setup () работает в полночь, а затем повторно назначает schedule_list и, следовательно, время, в которое он отправляет сообщения о разногласиях, но это тоже не сработало: (

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

Любая помощь / идеи или другие материалы будут очень благодарны:)

Спасибо,

Обратите внимание:

Мой код может быть не самым лучшим, но каждый день отправляется 21 сообщение, и я считаю, что с этим способом кодирования мне проще всего работать. Он все еще находится в фазе 1 Альфа и, скорее всего, будет изменен до его завершения.

Вопрос в том, как переопределить расписание, остальная часть кода предназначена только для контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...