Как создать скрипт на Python как службу в Windows

Для создания скрипта Python в качестве службы в операционной системе Windows может использоваться модуль pywin32.

Вот пример кода, который позволяет настроить скрипт Python как службу Windows:

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import os
import sys

class PythonScriptService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'PythonScriptService'
    _svc_display_name_ = 'Служба Python Script'

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
        socket.setdefaulttimeout(60)
        self.is_running = True

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
        self.is_running = False

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_, ''))
        self.main()

    def main(self):
        # Код вашего скрипта
        pass

if __name__ == '__main__':
    if len(sys.argv) == 1:
        servicemanager.Initialize()
        servicemanager.PrepareToHostSingle(PythonScriptService)
        servicemanager.StartServiceCtrlDispatcher()
    else:
        win32serviceutil.HandleCommandLine(PythonScriptService)

Вам также потребуется создать файл .inf, чтобы зарегистрировать службу. Вот пример содержимого файла .inf:

[info]
service_name=PythonScriptService
display_name=Служба Python Script

Чтобы установить службу, выполните следующую команду в командной строке с правами администратора:

python путь_к_файлу.py install

Затем можно запустить службу с помощью следующей команды:

python путь_к_файлу.py start

И, наконец, чтобы остановить службу, используйте команду:

python путь_к_файлу.py stop

Убедитесь, что у вас установлен модуль pywin32.

Детальный ответ

Скрипт Python как служба Windows

В данной статье мы рассмотрим, как создать и запустить скрипт Python в качестве службы Windows. Мы также предоставим примеры кода для более понятного объяснения процесса.

Почему использовать скрипт Python как службу Windows?

Если у вас есть скрипт на Python, который вы хотите запускать на вашем компьютере в качестве службы, то это может быть полезно по нескольким причинам:

  1. Постоянное выполнение: Служба Windows может запускать ваш скрипт Python автоматически при загрузке компьютера и продолжать его выполнение всегда, когда компьютер включен.
  2. Отсутствие необходимости в входе пользователя: Службы Windows могут работать без вмешательства пользователя, поэтому ваш скрипт может регулярно выполняться, даже если вы не вошли в систему.
  3. Удобство управления: Вы можете управлять службой Python через интерфейс служб Windows, что делает ее более удобной для контроля и настройки.

Начало работы

Первым шагом для создания скрипта Python в качестве службы Windows является установка PyWin32. Поэтому убедитесь, что у вас уже установлен PyWin32. Если нет, можно установить его с помощью pip командой:

pip install pywin32

Теперь, когда у вас есть PyWin32, мы можем перейти к созданию самой службы.

Создание службы Python

Следующий пример кода демонстрирует, как создать службу Python с использованием PyWin32:

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import sys
import os
import logging
import inspect

class MyService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'MyPythonService'
    _svc_display_name_ = 'My Python Service'

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
        socket.setdefaulttimeout(60)
        self.is_running = True
        self.logger = self._set_up_logging()

    def _set_up_logging(self):
        logger = logging.getLogger()
        logger.setLevel(logging.INFO)
        formatter = logging.Formatter('%(asctime)s - %(message)s')
        handler = logging.FileHandler(os.path.join(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))), "log.txt"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)
        return logger

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
        self.is_running = False

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, ''))
        self.main()

    def main(self):
        self.logger.info('Service is running...')
        # Ваш код здесь

if __name__ == '__main__':
    if len(sys.argv) == 1:
        servicemanager.Initialize()
        servicemanager.PrepareToHostSingle(MyService)
        servicemanager.StartServiceCtrlDispatcher()
    else:
        win32serviceutil.HandleCommandLine(MyService)

В этом примере мы создаем класс MyService, который наследуется от win32serviceutil.ServiceFramework. Затем мы определяем необходимые методы, такие как __init__, SvcStop, SvcDoRun и main. Мы также инициализируем логгирование для нашей службы. Внутри метода main вы можете разместить свой собственный код для выполнения внутри службы.

Регистрация службы

Чтобы зарегистрировать ваш скрипт в качестве службы, откройте командную строку с правами администратора и перейдите к папке, содержащей ваш скрипт. Затем выполните следующую команду:

python <путь_к_вашему_скрипту>.py install

Это команда зарегистрирует ваш скрипт в Windows в качестве службы.

Запуск службы

После регистрации вашей службы она будет готова к запуску. Вы можете запустить службу используя команду:

python <путь_к_вашему_скрипту>.py start

Теперь ваш скрипт будет выполняться в качестве службы Windows.

Управление службой

Вы также можете управлять своей службой с помощью доступных команд.

  • Остановить службу: python <путь_к_вашему_скрипту>.py stop
  • Перезапустить службу: python <путь_к_вашему_скрипту>.py restart
  • Удалить службу: python <путь_к_вашему_скрипту>.py remove

Заключение

В этой статье мы рассмотрели, как создать и запустить скрипт Python в качестве службы Windows. Мы предоставили вам пример кода и объяснили каждый шаг процесса. Теперь у вас есть все необходимое для создания и управления службой Python на вашем компьютере. Надеемся, что эта информация окажется полезной для вас!

Видео по теме

Планирование и автозапуск Python скриптов по времени

Программа на Python для управления компьютером / Python + PyAutoGUI

Как сделать автозапуск программ на Python по расписанию

Похожие статьи:

как в питоне задать промежуток переменной? 🐍✨

Как установить Python на Mac OS: Подробное руководство для начинающих

Как распарсить текст в Python: пошаговое руководство для начинающих 🐍💻

Как создать скрипт на Python как службу в Windows

Как подключить командную строку к Python: легкий и подробный гайд

Как объединить элементы списка в Python? 🐍🔗

Как построить треугольник Паскаля в Питоне: шаг за шагом руководство для начинающих