Добавьте скрипт Python в качестве службы WindowsPython

Программы на Python
Ответить
Anonymous
 Добавьте скрипт Python в качестве службы Windows

Сообщение Anonymous »

Я использую сборку Python 3.12 и pywin32 308 для регистрации скрипта в качестве службы. Я запускаю Windows 11.
У меня есть проект по следующему пути, и я запускаю его из venv в этой папке: C:\web\myapp-django-fullstack-main
Я запустил сценарий постустановки, и служба зарегистрировалась в Windows, но когда я пытаюсь запустить его, я получаю ошибку 1053. Служба не ответила вовремя. Что я делаю не так? Python не мой профессиональный язык, я просто работаю над ним.
Я пробовал скопировать из C:\Program Files\Python312\Lib\site-packages\pywin32_system32\pywintypes312.dll и скопируйте его в C:\Program Files\Python312\Lib\site-packages\win32
А также попробовал добавить переменные среды на свой компьютер, что привело к .venv\Lib\site-packages\pywin32_system32\
Вот сценарий:
#!/usr/bin/env python
import os
import os.path
import sys
import site

if sys.executable.lower().endswith("pythonservice.exe"):

# Change current working directory from PythonService.exe location to something better.
service_directory = os.path.dirname(__file__)
source_directory = os.path.abspath(service_directory)
os.chdir(source_directory)

# Manually activate a virtual environment inside an already initialized interpreter.
venv_base = os.path.abspath(os.path.join(source_directory, ".venv"))
site_packages = os.path.join(venv_base, 'Lib', 'site-packages')
site.addsitedir(site_packages)

# This is my base path
base_path = os.path.dirname(os.path.abspath(__file__))
if not base_path in sys.path:
sys.path.append(base_path)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "crosstab.settings")

import win32serviceutil
import win32service
import win32event
import time
import servicemanager

class MyService(win32serviceutil.ServiceFramework):
_svc_name_ = 'PythonServiceTest'
_svc_display_name_ = 'Python Test Service'

def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
self.running = True

def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.stop_event)
self.running = False

def SvcRun(self):
while self.running:
print('Скрипт работает...')
time.sleep(60)

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


Подробнее здесь: https://stackoverflow.com/questions/793 ... ws-service
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»