Примечание: я новичок в ТАК, поэтому извиняюсь за любые ошибки. Я сделал несколько проектов в 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 Альфа и, скорее всего, будет изменен до его завершения.
Вопрос в том, как переопределить расписание, остальная часть кода предназначена только для контекста.