Урок 8 из 8 · 20 мин · обновлено
Запуск по расписанию и что изучать дальше
Как запускать скрипты Python по расписанию: пути относительно скрипта, журнал работы через logging, Планировщик заданий Windows и cron на macOS и Linux. И куда расти дальше: pandas, автоматизация браузера, Git.
Готовим скрипт к работе без вас
Отчёт собирается, письма отправляются, цены пересчитываются. Осталось последнее: чтобы всё это запускалось само, каждый понедельник в 9 утра. Но сначала скрипт нужно подготовить: по расписанию его запускает система, а не вы, и это меняет две вещи.
Пути. Когда вы запускаете python report.py из папки проекта, путь Path("магазин_1.xlsx") ищется в ней. Планировщик запускает скрипт из другой папки, и файлы «пропадают». Надёжный способ — строить пути от папки, где лежит сам скрипт:
from pathlib import Path
HERE = Path(__file__).parent # папка, где лежит сам скрипт
files = sorted(HERE.glob("магазин_*.xlsx"))
Сообщения. print() при запуске по расписанию печатать некуда — экран никто не видит. Вместо него пишут журнал (лог) в файл модулем logging.
Журнал работы
import logging
from pathlib import Path
HERE = Path(__file__).parent
logging.basicConfig(
filename=HERE / "отчёт.log",
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s",
encoding="utf-8",
)
try:
files = sorted(HERE.glob("магазин_*.xlsx"))
if not files:
raise FileNotFoundError("нет файлов магазинов")
logging.info("Нашли файлов: %s", len(files))
# ... здесь собираем и отправляем отчёт, как в уроках 4 и 6
logging.info("Отчёт готов")
except Exception:
logging.exception("Отчёт не собран")
После удачного запуска в файле отчёт.log появятся строки:
2026-10-26 09:00:01,412 INFO Нашли файлов: 3
2026-10-26 09:00:02,087 INFO Отчёт готов
А если магазины не прислали файлы — запись об ошибке с подробностями:
2026-10-26 09:00:01,203 ERROR Отчёт не собран
Traceback (most recent call last):
...
FileNotFoundError: нет файлов магазинов
basicConfig()настраивает журнал один раз: файл, уровень важности, формат строки.%(asctime)s— время,%(levelname)s— уровень,%(message)s— текст;logging.info()— обычное сообщение,logging.exception()— ошибка вместе с полным описанием, где она случилась;try ... except Exceptionловит любую ошибку, чтобы она попала в журнал, а не исчезла вместе с закрытым окном.
Если хочется узнавать о проблемах сразу, в блок except можно добавить отправку письма себе — как в уроке 6.
Расписание на Windows
На Windows задачи по расписанию запускает встроенный Планировщик заданий:
- Откройте «Пуск» и найдите «Планировщик заданий».
- Справа нажмите «Создать простую задачу», введите название, например «Отчёт по продажам».
- Триггер — «Еженедельно», понедельник, 9:00.
- Действие — «Запустить программу».
- Программа: полный путь к Python из виртуального окружения проекта, например
C:\kancmarket\.venv\Scripts\pythonw.exe.pythonwзапускает скрипт без чёрного окна терминала. - Аргументы: имя скрипта,
report.py. - Рабочая папка: папка проекта,
C:\kancmarket.
Python именно из .venv важен: только в нём установлены openpyxl и requests. Проверьте задачу сразу: правой кнопкой по ней → «Выполнить», затем загляните в журнал.
Учтите, что задача выполнится, только если компьютер включён. Если нужно, чтобы отчёт собирался всегда, скрипт переносят на сервер, который работает круглосуточно.
Расписание на macOS и Linux
Здесь расписание задают в cron. Откройте список задач командой:
crontab -e
И добавьте строку:
0 9 * * 1 /home/user/kancmarket/.venv/bin/python /home/user/kancmarket/report.py
Пять полей в начале — когда запускать: минута, час, день месяца, месяц, день недели. 0 9 * * 1 — в 0 минут 9-го часа, в любой день месяца, любой месяц, по понедельникам. Звёздочка означает «любое значение». Дальше — полные пути к Python из окружения и к скрипту. Подробнее о терминале и сервере — в курсе «Командная строка и Linux».
Что изучать дальше
Вы прошли основные инструменты автоматизации. Куда двигаться дальше, зависит от ваших задач:
| Если нужно | Что изучить |
|---|---|
| Таблицы на сотни тысяч строк, сложные сводные | Библиотеку pandas |
| Сайт без API и без выгрузки в файл | Автоматизацию браузера: Playwright или Selenium |
| Документы Word и PDF | Библиотеки python-docx и pypdf |
| Не потерять рабочую версию скриптов | Git — курс «Git и GitHub» |
| Данные лежат в базе | SQL — курс «SQL с нуля» |
Про автоматизацию браузера важно помнить: у сайтов есть правила использования, а частые автоматические запросы могут нагрузить чужой сервер. Сначала ищите официальную выгрузку или API.
Главное — не откладывать: возьмите одну свою задачу, которая повторяется каждую неделю, и автоматизируйте её. Даже скрипт на 20 строк, который экономит 15 минут в неделю, — это 12 часов в год.
Попробуйте сами. Объедините уроки курса в один скрипт report.py: собрать отчёт из файлов магазинов (урок 4), записать в журнал, сколько файлов нашлось, и отправить письма в режиме пробного запуска (урок 6). Все пути стройте от папки скрипта.
Каркас решения
import logging
from pathlib import Path
HERE = Path(__file__).parent
logging.basicConfig(filename=HERE / "отчёт.log", level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s", encoding="utf-8")
def build_report():
files = sorted(HERE.glob("магазин_*.xlsx"))
if not files:
raise FileNotFoundError("нет файлов магазинов")
logging.info("Нашли файлов: %s", len(files))
report_path = HERE / "Отчёт за неделю.xlsx"
# код из урока 4: читаем файлы, считаем, сохраняем report_path
return report_path
def send_letters(report_path):
# код из урока 6: читаем HERE / "менеджеры.csv", собираем и отправляем письма
logging.info("Письма отправлены")
try:
send_letters(build_report())
except Exception:
logging.exception("Отчёт не собран")
Каждый шаг — своя функция. Так скрипт проще читать, а если сломается отправка писем, по журналу сразу будет видно, на каком шаге.
Мини-тест · 4 вопроса
Проверьте себя
Выберите вариант, который кажется вам правильным. В конце вы увидите свой результат и объяснение к каждому вопросу.
-
Скрипт работает, если запустить его руками, но по расписанию пишет «файл не найден». Самая вероятная причина?
Путь Path("магазин_1.xlsx") считается от папки, из которой запустили скрипт. Надёжнее строить пути от папки самого скрипта: Path(__file__).parent.
-
Зачем скрипту, который работает по расписанию, журнал logging?
Ночью print() печатать некуда. Журнал в файле сохраняет время, сообщения и текст ошибки.
-
Что означает строка cron «0 9 * * 1 …»?
Поля cron: минута, час, день месяца, месяц, день недели. 0 минут, 9 часов, любой день и месяц, день недели 1 — понедельник.
-
Сайт показывает нужные данные, но API у него нет. Что можно попробовать?
Многие сервисы умеют выгружать данные в файл — это самый простой путь. Если нет, браузером можно управлять из Python, соблюдая правила сайта.