Я нахожусь на ранней стадии изучения Python и столкнулся с проблемой в своем первом проекте.
Для контекста я создаю приложение, которое каждый день отправляет электронное письмо с несколькими предложениями с определенной страницы Википедии. Например, пользователь получит краткое изложение статьи в Википедии для «Нью-Йорк Таймс». Каждый день отправляется электронное письмо по новой теме Википедии. Цель состоит в том, чтобы человек каждый день узнавал о новой теме по электронной почте.
Мой код хорошо работает в моей локальной среде. Но мне нужно было развернуть приложение, чтобы гарантировать ежедневную отправку писем, даже когда мой компьютер был выключен. Для этого я использую Github Actions для ежедневного запуска файлов в запланированное время.
Говоря конкретнее, у меня есть файл Python File1.py, в который предварительно загружено несколько тем из Википедии. Он обрабатывает первые 10 предложений одной из предварительно загруженных тем Википедии с помощью API Википедии и отправляет эти предложения по электронной почте. Затем он обновляет переменную «counter» во втором скрипте Python, File2.py, и завершает работу.
Цель этого — убедиться, что File1.py начинается со следующих десяти предложений темы Википедии. Или перейти к следующей теме, если она уже готова.
При этом я не могу понять, как правильно запустить это с Github. Файл YAML выполняется правильно и запускает File1.py, электронное письмо отправляется по расписанию, но файл File2.py, содержащий переменную счетчика, не обновляется. Это проблема. Если есть лучший способ сделать это без записи в File2.py, дайте мне знать.
Вот часть File1.py
# # Iterates over the sentences
while True:
for j in range(len(listOfTopics)):
# When a new page starts, set counter to 0 again
new_value = 0
with open(r'File2.py', 'w') as f:
f.write(f"counter = {new_value}")
f.flush()
f.close()
initialPage = wikipedia.page(listOfTopics[j])
totalContent = initialPage.content
sentences = sent_tokenize(totalContent) # Breaking down the content into sentences
tenSentences = []
for i in range(counter, len(totalContent)):
tenSentences.append(sentences[i])
if len(tenSentences) == 10:
server.sendmail('[email protected]', '[email protected]', \
f"Subject: Topics Email.\n{tenSentences}".encode('utf-8'))
tenSentences = []
# Iterating through next ten sentences by changing the counter variable
new_value = counter + 10
with open(r'File2.py', 'w') as f:
f.write(f"counter = {new_value}")
f.flush()
f.close()
sys.exit()
А вот File2.py
counter=10
@ravenwing Нет. Придется ли мне зафиксировать File2.py через файл YAML? Я не был уверен, как это сработает. Я пробовал использовать ИИ для ответов, но там упоминалось, что мне следует использовать входы и выходы для чего-то вроде этого.






Каждый раз, когда вы запускаете рабочий процесс, он начинается с новой среды. Хотя вы не предоставили общий доступ к файлу рабочего процесса, я предполагаю, что одним из шагов является оформление заказа.
Это означает, что это происходит каждый раз:
counter=10)counter=11)counter)Итак, мне в голову приходят два решения:
Это решение — то, что вы ожидаете. Просто зафиксируйте counter=11 после третьего шага. Это изменит ваш счетчик, проверенный на первом шаге. В действиях на github мало ответов, как это сделать
Это решение требует гораздо больше работы, но оно более... готово к производству. Этот счетчик может обслуживаться извне. Я имею в виду доступность через какой-то API или, возможно, подключение к базе данных?
Не пробуйте, но есть бесплатный CountAPI
couter=11 зафиксируете его. С помощью атомарного API вы should получаете counter=11 и counter=12.Коммит сработал. В частности, я добавил строку фиксации в конец моего YAML-файла: - name: зафиксировать изменения в файле run: | git config --global user.name "GitHub Actions" git config --global user.email "[email protected]" git add ./File2.py git commit -m "Обновить файл счетчика" git push origin main Первый раз Я запустил его, но он не сработал, потому что мне пришлось изменить разрешения на действия (Действия > Общие > Разрешения рабочего процесса > Разрешение на чтение и запись). Спасибо за помощь, @ravenwing!
Я предполагаю, что вы не коммитируете FIle2.py в своих действиях на GitHub, верно?