Как запустить python скрипт при старте Windows?
Можно и не абсолютные если питон прописан в PATH, и есть понимание от какого пользователя будет запускаться и какая директория будет текущей.
В любом случае надо убедиться что у пользователя от которого он будет исполнятся есть необходимые права.

Илья @Rimush Автор вопроса
Проблема в том что у меня там создается поток с бесконечным циклом.
Так вот после открытия скрип только один раз проходит и закрывается.
Как запустить python скрипт в фоновом режиме?
Я тут работаю над одним проектом(личный бот по факту) и возникла задача запустить его в фоне. То есть процесс будет висеть , но консоль(командная строка) будет закрыта(не свернута). Запуск скрипта с добавлением в конец & — не дает нужного результата. Думаю что нужно добавить пару строчек кода в сам скрипт.
Подскажите кто знает
- Вопрос задан более трёх лет назад
- 32349 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 4
Можно написать демон для systemd если в вашей операционной системе он используется.
Создаём файл демона:
sudo touch /etc/systemd/system/bot.service
Вставляем туда следующее:
[Unit] Description=My bot After=multi-user.target [Service] Type=idle ExecStart=/usr/bin/python /путь/до/скрипта/bot.py Restart=always [Install] WantedBy=multi-user.target
После этого в консоли выполяем:
sudo systemctl daemon-reload sudo systemctl enable bot.service sudo systemctl start bot.service
Чтобы остановить бот:
sudo systemctl stop bot.service
Чтобы удалить из автозагрузки:
sudo systemctl disable bot.service
Чтобы проверить работу демона:
sudo systemctl status bot.service
Ответ написан более трёх лет назад
Нравится 11 7 комментариев
yahabrovec @yahabrovec Автор вопроса
Я сижу на винде
yahabrovec, тю. С этого и нужно было начинать 🙂
Как это делается в винде я не знаю.
Планировщик заданий в винде сделать да и все.

Автору ответа большое спасибо, ответ помог настроить скрипт.
Я же добавлю свою настройку для запуска скрипта из окружения
Суть: у меня проект юзает pipenv и надо было его запускать из окружения. В целом не суть важно через что у вас создается окружение, настроить запуск скрипта из окружения возможно следующими шагами.
1) залейте проект на сервак (/home/myuser/tel-bot)
2) ставьте окружение, узнайте полный путь к питоноу вашего окружения (/home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python)
3) запускаем скрипт из окружения: ExecStart=/bin/bash -c ‘cd /home/myuser/tel-bot && /home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python run.py’
Вот полный конфиг systemd:
[Unit] Description=super puper bot After=multi-user.target [Service] Type=idle ExecStart=/bin/bash -c 'cd /home/myuser/tel-bot && /home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python run.py' Restart=always [Install] WantedBy=multi-user.target
Дмитрий, а если сперва надо перейти в каталог питон проекта а после запустить main.py как будет выглядеть команда?
ExecStart=/bin/bash -c ‘cd /home/myuser/scrypt && /usr/bin/python3 main.py’

alexbosco, да, вы написали верно, если у вас полный путь такой: /home/myuser/scrypt/main.py
IvanPetrovH @IvanPetrovH
Дмитрий, добавлю следующее. Когда я прописывал:
ExecStart=/bin/bash -c 'cd /home/myuser/tel-bot && /home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python run.py'
то при остановке или перезагрузки службы, у меня скрипт не отрабатывал до конца (как это было при завершении обычной работы скрипта [ctrl + C])
Первую команду из ExecStart можно убрать. Просто в той же секции [Service] пишем:
WorkingDirectory=/home/myuser/tel-bot
В итоге скрипт норм завершается, получаем:
WorkingDirectory=/home/myuser/tel-bot ExecStart=/bin/bash -c '/home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python run.py'
Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков
Это новый вид статьи, в котором мы не будем говорить про PHP, многим python превосходит php, а для начинающих он покажется проще. Данная статья будет содержать в себе следующие шаги:
1. Установка Python 3.7.3 на Windows.
Установка не занимает много времени и умений. Переходим на официальный сайт https://www.python.org/downloads/ и скачиваем установщик себе на ПК.
Запускаем установщик, обязательно поставьте галочку возле надписи Add Python 3.7 to PATH, так у вас не возникнет проблем при работе с командной строкой Windows.
После установки запускаем командую строку:

И пишем команду:

Если Вы сделали все правильно, то увидите список команд и опций
На этом установка Python успешно завершена. Переходим к установке IDE PyCharm
2. Установка PyCharm и его настройка.

Переходим на сайт jetbrains.com/pycharm и скачиваем среду PyCharm Community, она бесплатная.
После чего устаналвиваем и запускаем PyCharm

Забегая вперед, у меня по умолчанию в настройках программы стоял Python 2.7
Нам нужна последняя версия, открываем File -> Settings. -> Project interpreter и из выпадающего меню выбираем последнюю версию, или добавляем ее туда нажав на Show All…

Теперь можно создавать новый проект.
3. Создание проекта и установка библиотеки VK_API
В Pycharm выбираем: File -> New Project и создаем новый проект, выбрав необходимые настройки:
Теперь создаем новый файл, назовем его new.py, так как Python использует расширение .py (английскими буквами, не путайте) расширение указывать не обязательно.
Пишем наш первый самый простой код:
print("Привет :)")

И нажав правой кнопкой мыши по файлу, выбираем: Run ‘new’
Все работает. Теперь нам нужно установить библиотеку vk_api, для этого открываем терминал прямо в PyCharm и пишем команду:
pip install vk_api

Installing collected packages: urllib3, chardet, idna, certifi, requests, enum34, six, vk-api
Running setup.py install for vk-api … done
Successfully installed certifi-2019.6.16 chardet-3.0.4 enum34-1.1.6 idna-2.8 requests-2.22.0 six-1.12.0 urllib3-1.25.3 vk-api-11.4.0
Если в конце видите такой текст, библиотека успешно установлена, можно импортировать ее в проект и писать первый код:
# -*- coding: utf-8 -*- import vk_api from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType def main(): """ Пример использования bots longpoll https://vk.com/dev/bots_longpoll """ vk_session = vk_api.VkApi(token='your_group_token') longpoll = VkBotLongPoll(vk_session, 'your_group_id') for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: print('Новое сообщение:') print('Для меня от: ', end='') print(event.obj.from_id) print('Текст:', event.obj.text) print() elif event.type == VkBotEventType.MESSAGE_REPLY: print('Новое сообщение:') print('От меня для: ', end='') print(event.obj.peer_id) print('Текст:', event.obj.text) print() elif event.type == VkBotEventType.MESSAGE_TYPING_STATE: print('Печатает ', end='') print(event.obj.from_id, end=' ') print('для ', end='') print(event.obj.to_id) print() elif event.type == VkBotEventType.GROUP_JOIN: print(event.obj.user_id, end=' ') print('Вступил в группу!') print() elif event.type == VkBotEventType.GROUP_LEAVE: print(event.obj.user_id, end=' ') print('Покинул группу!') print() else: print(event.type) print() if __name__ == '__main__': main()
Это код из примера, благодаря нему мы убедимся что сделали все правильно. Вставить его нужно в файл new.py предварительно удалив все оттуда, что мы написали ранее.
4. Запуск скрипта используя LongPoll VK.

Для начала настроим наше сообщество.
Создаем ключ
Копируем ключ и вставляем его в наш скрипт:
Вместо ‘your_group_token‘ указываем ключ сообщества
Вместо ‘your_group_id‘ указываем ID нашего сообщества
Теперь переходим во вкладку Long Poll APIи включаем его
Далее, обязательно включаем тип событий, это частая ошибка при создании ботов, забыв включить события, бот не будет работать! Выбираем все что есть.
Вернемся к нашему коду. Давайте запустим наш скрипт и проверим как он будем обрабатывать события, запускаем скрипт:
Давайте покинем сообщество и снова вступим в него:
В консоли мы сразу увидели последние события. Немного добавим строк в наш код, и научим отвечать наше сообщество сообщением в ЛС на одно из событий:
from vk_api.utils import get_random_id
longpoll = VkBotLongPoll(vk_session, '176771278')
vk = vk_session.get_api()
И отправляем сообщение самому пользователю:
vk.messages.send( user_id=event.obj.from_id, random_id=get_random_id(), message=("Новое сообщение - ", event.obj.text) ) print('ok')
# -*- coding: utf-8 -*- import vk_api from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType from vk_api.utils import get_random_id def main(): """ Пример использования bots longpoll https://vk.com/dev/bots_longpoll """ vk_session = vk_api.VkApi(token='Ттут ваш токен') longpoll = VkBotLongPoll(vk_session, 'Ид сообщества') vk = vk_session.get_api() for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: print('Новое сообщение:') print('Для меня от: ', end='') print(event.obj.from_id) print('Текст:', event.obj.text) print() vk.messages.send( user_id=event.obj.from_id, random_id=get_random_id(), message=("Новое сообщение - " + event.obj.text) ) print('ok') elif event.type == VkBotEventType.MESSAGE_REPLY: print('Новое сообщение:') print('От меня для: ', end='') print(event.obj.peer_id) print('Текст:', event.obj.text) print() elif event.type == VkBotEventType.MESSAGE_TYPING_STATE: print('Печатает ', end='') print(event.obj.from_id, end=' ') print('для ', end='') print(event.obj.to_id) print() elif event.type == VkBotEventType.GROUP_JOIN: print(event.obj.user_id, end=' ') print('Вступил в группу!') print() elif event.type == VkBotEventType.GROUP_LEAVE: print(event.obj.user_id, end=' ') print('Покинул группу!') print() else: print(event.type) print() if __name__ == '__main__': main()
напишем любое сообщение нашему боту и получим ответ:

Как узнать названия других событий? Они будут выводится в консоли, так как в коде используется:
else: print(event.type) print()

Тут мы получили 2 события:
VkBotEventType.WALL_POST_NEW — Новый пост
VkBotEventType.GROUP_OFFICERS_EDIT — Выдача админ прав в самой группе
Документация и больше примеров можно посмотреть на GitHub . Если Вам интересен этот язык и вы хотите видеть больше статей по Python, пишите в комментарии об этом!
5. Разница между CallBack API и LongPoll
![]()
И все же в чем разница между CallBack API и Long Poll API? А разница есть и она большая.
Когда Вы используете CallBack API, ВК сам отправляет Вам происходящее событие на сервер, нам остается только получить его и обработать, у Long Poll API все наоборот, ВК ничего не отправляет, а хранит все события у себя на серверах, Вам нужно самому их получать и обрабатывать, Long Poll API подходит для высоко нагруженных проектов, в идеале советуем использовать оба типа получения событий. На этом наша статья подходит к концу, в следующий раз мы напишем как запустить Long Poll используя PHP, всем хорошего кодинга и настроения
Разработка ботов на заказ, любой сложности, обращаться:
VK Дмитрий Котов, Сергей Котов mail: [email protected]
TELEGRAM: @seriamod

- Сергей Котов
- 29.06.2019
- 40 127
- 12
- 14

Как создать образ с Windows 7/10 USB DVD Download Tool / Media Creation Tool
25-12-2018, 16:50, Статьи / Программы

Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
19-03-2019, 17:23, Статьи / PHP

Настройка своей VDS на Debian (8) под сайт
17-09-2019, 12:07, Статьи

Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
Разработка ботов на заказ, любой сложности, обращаться:
VK KOTOFF.net — Сообщество, в личные сообщения или по контактам указанным там
mail: [email protected]
Запускаем Python скрипт как сервис
Допустим, написали мы telegram бота на Python, теперь нам нужно чтобы он работал в фоне постоянно.
Можно написать демон для systemd если в вашей операционной системе он используется.
Создаём файл демона:
#touch /etc/systemd/system/bot.service
Вставляем туда следующее:
[Unit] Description=My bot After=syslog.target After=network.target [Service] Type=idle ExecStart=/usr/bin/python3 /путь/до/скрипта/bot.py Restart=always RestartSec=15 [Install] WantedBy=multi-user.target
После этого в консоли выполяем:
#systemctl daemon-reload #systemctl enable bot #systemctl start bot
Чтобы остановить бот:
sudo systemctl stop bot
Чтобы удалить из автозагрузки:
sudo systemctl disable bot
Чтобы проверить работу демона:
#systemctl status bot
Чтобы смотреть журнал работы (вывод в консоль) демона:
#journalctl -u bot -f -o cat
Запуск Python бота через pm2
pm2 — довольно удобный менеджер процессов, который так-же как systemctl автоматически запускает их при запуске системы и может перезапускать при вылете.
У вас должен быть установлен npm.
Устанавливаем pm2: #npm i -g pm2
И так, для начала на нужно с помощью команды cd, перейти в директорию где расположен главный файл бота.
Затем, выполняем команду:
#pm2 start main.py --interpreter=/usr/local/bin/python3.9 --exp-backoff-restart-delay=100 -n name_bot
main.py — Имя главного файла
/usr/local/bin/python3.9 — Путь до обработчика python
100 — время в миллисекундах до перезапуска после сбоя
name_bot — Название процесса который мы создаем
Посмотреть состояние всех процессов pm2:
Посмотреть вывод (логи) конкретного бота (процесса):
#pm2 logs name_bot
Удалить не нужный процесс из pm2:
