Heim > Backend-Entwicklung > Python-Tutorial > 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

高洛峰
Freigeben: 2017-03-28 09:46:05
Original
1737 Leute haben es durchsucht

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)
Nach dem Login kopieren

Pyinstaller-Paket

pyinstaller -F MyService.py
Nach dem Login kopieren

Test

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


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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage