Как создать скрипт на 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, который вы хотите запускать на вашем компьютере в качестве службы, то это может быть полезно по нескольким причинам:
- Постоянное выполнение: Служба Windows может запускать ваш скрипт Python автоматически при загрузке компьютера и продолжать его выполнение всегда, когда компьютер включен.
- Отсутствие необходимости в входе пользователя: Службы Windows могут работать без вмешательства пользователя, поэтому ваш скрипт может регулярно выполняться, даже если вы не вошли в систему.
- Удобство управления: Вы можете управлять службой 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 на вашем компьютере. Надеемся, что эта информация окажется полезной для вас!