Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung von Beispielen zum Erstellen von Windows-Systemdiensten in Python

Ausführliche Erläuterung von Beispielen zum Erstellen von Windows-Systemdiensten in Python

高洛峰
高洛峰Original
2017-03-28 09:46:051683Durchsuche

Dieser Artikel stellt hauptsächlich die relevanten Informationen von Python zum Erstellen von Windows-Systemdiensten vor. Er hat einen bestimmten Referenzwert.

Kürzlich Ein Python-Programm muss sein installiert und als Windows-Systemdienst ausgeführt. Dabei bin ich auf einige Fallstricke gestoßen und habe sie behoben.

Python-Dienstklasse

Zunächst muss das Python-Programm eine Windows-System-API aufrufen, um als Systemdienst zu dienen. Der spezifische Inhalt lautet wie folgt:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import time
import win32api
import win32event
import win32service
import win32serviceutil
import servicemanager
class MyService(win32serviceutil.ServiceFramework):
  _svc_name_ = "MyService"
  _svc_display_name_ = "My Service"
  _svc_description_ = "My Service"
  def init(self, args):
    self.log('init')
    win32serviceutil.ServiceFramework.init(self, args)
    self.stop_event = win32event.CreateEvent(None, 0, 0, None)
  def SvcDoRun(self):
    self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
    try:
      self.ReportServiceStatus(win32service.SERVICE_RUNNING)
      self.log('start')
      self.start()
      self.log('wait')
      win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
      self.log('done')
    except BaseException as e:
      self.log('Exception : %s' % e)
      self.SvcStop()
  def SvcStop(self):
    self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    self.log('stopping')
    self.stop()
    self.log('stopped')
    win32event.SetEvent(self.stop_event)
    self.ReportServiceStatus(win32service.SERVICE_STOPPED)
  def start(self):
    time.sleep(10000)
  def stop(self):
    pass
  def log(self, msg):
    servicemanager.LogInfoMsg(str(msg))
  def sleep(self, minute):
    win32api.Sleep((minute*1000), True)
if name == "main":
  if len(sys.argv) == 1:
    servicemanager.Initialize()
    servicemanager.PrepareToHostSingle(MyService)
    servicemanager.StartServiceCtrlDispatcher()
  else:
    win32serviceutil.HandleCommandLine(MyService)

Pyinstaller-Paket

pyinstaller -F MyService.py

Test

# 安装服务
dist\MyService.exe install
# 启动服务
sc start MyService
# 停止服务
sc stop MyService
# 删除服务
sc delete MyService


Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Beispielen zum Erstellen von Windows-Systemdiensten in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn