Скрипты на языке Python: как написать, запустить и не сломать через неделю
Скрипты на языке Python — это небольшие программы под одну конкретную задачу: разложить файлы, свести выгрузки, забрать данные, отправить отчёт. Первая рабочая версия действительно пишется за вечер, и это не преувеличение. Разница между ней и инструментом, который работает сам каждый день, — примерно неделя работы, и она уходит вовсе не на логику. Ниже — что делается быстро, где начинаются грабли и в какой момент дешевле отдать задачу.
Чем скрипт отличается от программы
«Скрипт» — это не про размер, а про способ жизни кода. Одна задача, один способ запуска, один пользователь — вы. Ни интерфейса, ни установки, ни версий: есть файл, который что-то делает и завершается.
- Одна задача. Не «система учёта», а «собрать три выгрузки в один файл». Как только задач становится две, скрипт хочет разделиться надвое — это нормально.
- Начало и конец. Скрипт отработал и вышел. Постоянно висящий процесс — уже сервис, и правила у него другие.
- Понятный вход и выход. Папка с файлами на входе, файл или строка в базе на выходе. Всё, что между, можно переписать, не сломав остальное.
Python выигрывает здесь не скоростью выполнения, а стандартной библиотекой: пути и папки, даты, CSV, JSON, архивы, почта, аргументы командной строки, логи — всё это доступно без единой установки. Внешние пакеты нужны там, где начинаются Excel, HTTP-запросы и таблицы данных.
Как написать скрипт на Python: вечер до первого результата
Порядок, который экономит больше всего времени новичку. Он же отвечает на вопросы про создание скрипта на Python и установку — почти все проблемы старта живут именно здесь.
- Поставить Python и проверить запуск. На Windows при установке отметьте добавление в PATH, иначе команда не найдётся. Проверка одна: вывести версию из терминала.
- Сделать виртуальное окружение под проект. Модуль venv входит в состав Python. Окружение изолирует пакеты проекта от системных, и через полгода вы точно будете знать, что именно скрипту нужно.
- Записать зависимости. Список пакетов в requirements.txt — три строки текста, которые превращают «у меня работало» в воспроизводимый запуск на другой машине.
- Сначала сделать вручную и записать шаги. Пять пунктов на бумаге: откуда беру, что проверяю, что считаю, куда кладу. Код после этого пишется в разы быстрее, потому что становится видно, где в процессе дыры.
- Написать самый прямой вариант. Без классов, без универсальности, с жёстко прописанными путями. Задача первой версии — доказать, что данные вообще достаются и результат совпадает с ручным.
- Сверить с ручным результатом. Не «похоже», а совпало по строкам и суммам. Это единственный момент, когда сверка стоит дёшево.
Главная ловушка первого дня — писать сразу «правильно и на будущее». Универсальный код под задачу, которую вы ещё не поняли, почти всегда выбрасывается. Сначала работающий прямой вариант, потом уборка.
К концу вечера у вас есть простой скрипт на Python, который делает нужное при запуске руками. Это честные 20 % проекта — и те самые 20 %, ради которых многие задачи не стоит отдавать наружу вовсе.
Примеры скриптов на Python, которые окупаются первыми
Полезные скрипты автоматизации на Python почти всегда растут из фразы «я это делаю каждую неделю руками». Типовые задачи и то, чем они решаются:
| Задача | Что делает скрипт | Чем делается |
|---|---|---|
| Разбор входящей папки | Читает файлы, переименовывает по дате и раскладывает по подпапкам | pathlib, shutil — стандартная библиотека |
| Сводный отчёт | Собирает несколько CSV и xlsx, сверяет и считает итоги | pandas, openpyxl |
| Выгрузка из чужого сервиса | Ходит в API и складывает ответы в базу или таблицу | requests или httpx |
| Сбор данных со страниц | Обходит каталог и достаёт нужные поля | requests, BeautifulSoup, lxml |
| Доставка результата | Кладёт готовый файл в почту или Telegram | smtplib, обычный HTTP-запрос |
| Контроль сроков | Сравнивает даты и пишет, что просрочено | datetime — стандартная библиотека |
Отдельно про готовые скрипты на Python из интернета. Как образец — нормально. Но запускать чужой код на рабочих данных, не прочитав его целиком, не стоит: он рассчитан на чужие форматы, почти никогда не проверяет вход и часто перезаписывает файлы на месте. Первый прогон — всегда на копии.
Запуск скрипта на Python: Windows, Linux, сервер
Запуск руками — это команда с указанием файла. Интереснее вопрос, как заставить скрипт запускаться самому, потому что именно здесь ломается больше всего проектов.
- Windows. Планировщик заданий: интерпретатор из виртуального окружения, полный путь к файлу и обязательно рабочая папка — по умолчанию она не та, что вы думаете. Если компьютер бывает выключен, включите запуск пропущенной задачи.
- Linux, простой случай. cron. Работает десятилетиями, но не читает ваш профиль: переменные окружения и PATH в нём другие. Отсюда правило — в строке cron только абсолютные пути, включая путь к Python внутри окружения.
- Linux, если нужен контроль. Таймер systemd: запуск логируется в журнал, пропущенный из-за выключения запуск догоняется параметром Persistent, задаче можно ограничить память и процессор. Настройка дольше, чем строка cron, зато видно, что происходило.
- Сервер. Python-скрипт на сервере отличается от домашнего только тем, что там нет вас: некому посмотреть на экран, некому нажать «повторить». Значит, всё состояние — в файлах и логах, а не в голове.
Три ошибки повторяются почти у всех: относительные пути (в терминале работает, из планировщика нет), потерянный вывод (cron шлёт его почтой, а без настроенной почты он исчезает) и запуск системным интерпретатором вместо того, что в окружении с пакетами.
Проверять расписание нужно не на бумаге. Поставьте задачу на ближайшие пять минут, дождитесь запуска и посмотрите лог. Половина «настроенных» расписаний не срабатывает ни разу, и узнают об этом через месяц.
Пока читаете — можно сразу проверить свою задачу. Опишите процесс, и я скажу, решается ли он и во сколько обойдётся.
Где скрипт ломается на второй неделе
Первая версия падает громко и сразу — это не проблема. Проблема там, где скрипт работает, а результат тихо портится:
- Изменился источник. Поставщик добавил колонку, сайт поменял вёрстку, сервис переименовал поле. Код не падает — он берёт пустоту и уверенно кладёт её в отчёт.
- Дубли после повторного запуска. Скрипт запустили дважды за день, и данные удвоились. Лечится не аккуратностью, а ключом: запись обновляется по идентификатору, а не добавляется.
- Лимиты и таймауты. У чужого API кончилась квота, сайт ответил кодом 429, сеть моргнула. Без таймаута на запросе задача может висеть сутками, занимая место в планировщике.
- Забытый запуск. Сервер перезагрузили, окружение переехало, срок сертификата вышел — скрипт просто перестал запускаться. Никакой ошибки не приходит, потому что не пришло вообще ничего.
- Кодировки и даты. Классика российских выгрузок: CSV в windows-1251, даты то с точками, то через дефис, суммы с неразрывным пробелом. Одна такая мелочь ломает расчёт молча.
Правило, которое стоит внедрить первым: молчаливый сбой запрещён. Скрипт либо выдал результат, либо сообщил об ошибке. Пустой файл на месте отчёта — худший из возможных исходов, потому что по нему принимают решения.
Что превращает код из туториала в рабочий инструмент
Написание скриптов на Python для себя и для процесса, на котором завязаны деньги, — разные дисциплины. Отличий немного, и добавляются они за несколько дней.
Три вещи, которые я закладываю по умолчанию. Параметры вместо констант: период и пути задаются при запуске, тогда прошлый месяц пересчитывается без правки кода. Идемпотентность: повторный запуск за тот же период даёт тот же результат, а не второй комплект строк. Сохранение исходников: скачанные файлы складываются как есть — когда через месяц спросят, откуда цифра, понадобятся именно они.
Когда заказывать не нужно
Значительную долю задач, под которые просят разработку, дешевле закрыть самому или не закрывать вообще.
- Задача разовая. Свести два файла один раз — час работы человека. Разработка тут не окупится никогда.
- Хватает штатных средств. Формулы и Power Query в Excel, экспорт по расписанию в CRM, готовый коннектор между сервисами. Всё это уже оплачено и не требует поддержки.
- Вы хотите разобраться. Если цель — научиться, отдавать задачу бессмысленно: вечер с документацией даст больше, чем готовый файл от подрядчика.
- Процесс ещё не устоялся. Когда правила меняются каждую неделю, автоматизировать нечего — скрипт просто зафиксирует в коде текущую неразбериху.
- Нет ответственного за данные. Если два отдела считают показатель по-разному, скрипт не решит спор, а ускорит расхождение.
Отдавать имеет смысл в обратной ситуации: рутина повторяется, источников несколько, результат нужен без вашего участия. Платите вы тогда не за код — за те самые пять слоёв вокруг него.
| Задача | Что входит | Срок и цена |
|---|---|---|
| Скрипт под одну операцию | Один источник, результат в файл, запуск руками | 1–2 дня, от 15 000 ₽ |
| Скрипт по расписанию | 2–5 источников, проверки, логи, уведомления о сбое | 3–7 дней, 40 000–90 000 ₽ |
| Набор связанных скриптов | Общий конфиг, хранилище, догрузка за прошлые периоды | от 120 000 ₽ |
| Поддержка | Правки под новые форматы источников | от 8 000 ₽ в месяц |
Две самые частые темы для таких скриптов разобраны отдельно: сбор данных со страниц — в статье про парсер сайта на Python, а сборка отчётов в таблицы — в разборе автоматизации Python и Excel.
Частые вопросы
Как написать скрипт на Python новичку?
Сначала опишите процесс словами: откуда берём данные, что проверяем, что считаем, куда кладём результат. Затем поставьте Python, создайте виртуальное окружение и напишите самый прямой вариант без универсальности. Последний шаг обязателен — сверить результат с тем, что вы делали руками.
Как запустить скрипт на Python в Windows?
Из терминала — командой с указанием интерпретатора и полного пути к файлу; если Python не найден, при установке не был отмечен пункт добавления в PATH. Для запуска по расписанию используется Планировщик заданий: там задаются интерпретатор из виртуального окружения, путь к скрипту и рабочая папка.
Чем запускать скрипт по расписанию на Linux?
cron для простых случаев и таймер systemd, когда нужны журнал запусков, догон пропущенного запуска после перезагрузки и ограничение ресурсов. В обоих случаях указывайте абсолютные пути: cron не читает ваш профиль, поэтому переменные окружения и PATH там другие.
Нужно ли виртуальное окружение для одного скрипта?
Да, и оно стоит одну команду. Окружение изолирует пакеты проекта от системных, избавляет от конфликтов версий и позволяет зафиксировать зависимости в requirements.txt. Без него через полгода никто не вспомнит, что именно скрипту нужно для запуска.
Можно ли брать готовые скрипты из интернета?
Как образец — да, это экономит время. Но перед запуском на рабочих данных код нужно прочитать целиком: чужие скрипты рассчитаны на чужие форматы, редко проверяют вход и часто перезаписывают файлы на месте. Первый прогон — всегда на копии данных.
Сколько стоит написать скрипт на заказ?
Скрипт под одну операцию с запуском руками — от 15 000 ₽ и 1–2 дня. Версия по расписанию с проверками, логами и уведомлениями о сбоях — 40 000–90 000 ₽ за 3–7 дней. Основное время уходит не на логику, а на обвязку, которая держит скрипт живым.
Читайте дальше
Опишите рутину — скажу, стоит ли её автоматизировать
Расскажите, что делаете руками и как часто: если задача закрывается штатными средствами, скажу прямо, а если нет — назову срок и цену скрипта.
Обсудить задачу