Python betiğini Windows'ta hizmet olarak nasıl çalıştırıyorsunuz?


261

Bir veritabanında depolanan birbiriyle ilişkili çeşitli nesneleri paylaşan bir dizi program için mimari çiziyorum. Programlardan birinin bu nesneler üzerindeki işlemler için daha üst düzey bir arabirim sağlayan bir hizmet olarak hareket etmesini ve diğer programların bu hizmet aracılığıyla nesnelere erişmesini istiyorum.

Şu anda bu hizmeti uygulamak için teknolojiler olarak Python ve Django çerçevesini hedefliyorum. Linux'ta Python programını nasıl daemonize edeceğime eminim. Ancak, sistemin Windows'u desteklemesi gereken isteğe bağlı bir özellik öğesidir. Windows programlama konusunda çok az deneyimim var ve Windows hizmetleriyle ilgili hiç deneyimim yok.

Python programlarını bir Windows hizmeti olarak çalıştırmak mümkün mü (yani kullanıcı girişi olmadan otomatik olarak çalıştırmak)? Bu kısmı uygulamak zorunda değilim, ancak bu çizgiler boyunca tasarım yapıp yapmayacağınıza karar vermek için nasıl yapılacağı hakkında kabaca bir fikre ihtiyacım var.

Edit: Şimdiye kadar tüm cevaplar için teşekkürler, onlar oldukça kapsamlı. Bir şey daha bilmek istiyorum: Windows hizmetimin nasıl farkında? Yerel Windows yardımcı programlarıyla yönetebilir miyim? /Etc/init.d dosyasına bir başlatma / durdurma komut dosyası koymanın eşdeğeri nedir?


2
Win32service API'sını kullandığı bu Windows Hizmeti şablonunu kontrol edin .
CMS

Yanıtlar:


255

Evet yapabilirsin. ActivePython ile gelen veya pywin32 (Windows için Python uzantıları) ile yüklenebilir pythoncom kütüphanelerini kullanarak bunu .

Bu, basit bir hizmet için temel bir iskelettir:

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket


class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "TestService"
    _svc_display_name_ = "Test Service"

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

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

    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__':
    win32serviceutil.HandleCommandLine(AppServerSvc)

Kodunuz main()yönteme gider; genellikle, SvcStopyöntemde ayarladığınız bir bayrağı kontrol ederek kesilebilecek bir tür sonsuz döngü ile


21
Bunu kodladıktan sonra, Windows'a bunu bir hizmet olarak çalıştırmasını nasıl söyleyebilirim?
Kit

33
@Kit: komut dosyanızı komut satırından "install" parametresiyle çalıştırın. Ardından, uygulamanızı başlatabileceğiniz, durdurabileceğiniz veya otomatik olarak başlayacak şekilde ayarlayabileceğiniz Windows Hizmetleri listesinde görebileceksiniz
Ricardo Reyes

16
Pythoncom'a özellikle değiniyorsunuz ve örnek kodunuza aktarıyorsunuz. Sorun aslında pythoncom'u örnek kodunuzun hiçbir yerinde kullanmamanız, sadece içe aktarmanızdır. Neden özel bir söz verdikten sonra kullanımını göstermiyorsunuz?
Buttons840

10
Neden socket.setdefaulttimeout(60)böyle? Bir hizmet için gerekli mi, yoksa yalnızca varolan bir hizmetten yanlışlıkla kopyalanmış mı? :)
Timur

7
chrisumbel.com/article/windows_services_in_python Bu benzer bir örnek ama daha eksiksiz
csprabala

41

Seçilen cevabı birkaç hafta önce iptal etsem de, bu arada bu konuda çok daha fazla mücadele ettim. Özel bir Python kurulumuna sahip olmak ve bir komut dosyasını hizmet olarak çalıştırmak için özel modüller kullanmak yanlış bir yol gibi geliyor. Taşınabilirlik ve benzeri ne olacak?

Windows Services ile uğraşmayı gerçekten basit ve aklı yapan harika Emici Olmayan Hizmet Yöneticisi ile karşılaştım. Yüklü bir hizmete seçenekleri aktarabildiğimi düşündüm, Python çalıştırılabilir dosyamı da seçebilir ve komut dosyamı bir seçenek olarak geçirebilirim.

Bu çözümü henüz denemedim, ancak şimdi yapacağım ve bu gönderiyi süreç boyunca güncelleyeceğim. Ben de sanal sanalları Windows'da kullanmakla ilgileniyorum, bu yüzden er ya da geç bir öğretici ile gelip buraya bağlantı verebilirim.


Şansın var mı? Bir istemci için çok basit bir site oluşturuyorum ve tüm Apache yığınını kullanmanıza gerek yok. Ben de diğer yorumları okudum gibi hizmeti tek başıma da sorun için bir davet gibi geldi.
Jaran

Evet, bu işe yarıyor ve bunu yapmak çok kolay. Sadece komut dosyasının yolunu ve bağımsız değişkenlerini verirsiniz. Birisinin bir şekilde bir konsol penceresi bulması durumunda benimkini konsoldan çıkartabildim.
kmcguire

Görünüşe göre bu işe yarıyor olsa da, özellikle "tüm Apache yığınını kullanmanız gerekmediğinde" başka zorluklar da var: örneğin gunicorn henüz Windows'ta çalışmıyor, ki bu aslında benim için bir şov oldu.
mknaf

4
Buradaki hile, python.exe'yi bir hizmet olarak ve python komut dosyanızı parametre olarak çalıştırmaktır: "nssm install MyServiceName c: \ python27 \ python.exe c: \ temp \ myscript.py"
poleguy

Harika çalışıyor! Birden çok sanal ortama sahip bir sistemde, yol istenen sanal ortamın Komut Dosyaları dizinindeki Python yorumlayıcı exe'sine başvurabilir. new-servicePowerShell'de bunu yapabiliyor gibi görünüyor , ancak bir komut dosyasını bir hizmet olarak başlatmak (ve izlemek) açıkça çok daha fazla ayrıntıyı içeriyor, bu da nssm'nin çok iyi hallediyor.
Fred Schleifer

26

En basit yol: NSSM - Emici Olmayan Hizmet Yöneticisi'ni kullanmaktır:

1 - https://nssm.cc/download adresinden indirme yapın

2 - python programını hizmet olarak yükleyin: Yönetici olarak win istemi

c:> nssm.exe kurulum WinService

3 - NSSM'nin konsolunda:

yol: C: \ Python27 \ Python27.exe

Başlangıç ​​dizini: C: \ Python27

Bağımsız Değişkenler: c: \ WinService.py

4 - services.msc adresinde oluşturulan hizmetleri kontrol edin


Ben hizmet olarak Visual Studio C ++ .exe yüklemek nssm.exe kullanmak için kullanılır ve şimdi hizmet olarak benim Python .pyc için de nssm.exe kullanabilirsiniz. Teşekkürler.
etoricky

Not: * .py komut dosyanızda boşluk bulunan bir klasörde bulunuyorsa (örneğin: C: \ Program Files \ myapp.py) tırnak içinde bağımsız değişken belirtmeniz gerekir: Bağımsız Değişkenler: "C: \ Program Files \ myapp.py"
Yury Kozlov

Sanal ortam nasıl sağlanır?
shaik moeed

24

Bunu başarmanın en basit yolu, yerel sc.exe komutunu kullanmaktır:

sc create PythonApp binPath= "C:\Python34\Python.exe --C:\tmp\pythonscript.py"

Referanslar:

  1. https://technet.microsoft.com/en-us/library/cc990289(v=ws.11).aspx
  2. Sc.exe ile bir hizmet oluştururken bağlam parametrelerine nasıl geçilir?

Bence, bu sizin komutunuz veya uygulamanızın kendisiyle ilgili bir sorun. Her neyse, bu support.microsoft.com/en-us/help/886695/…
pyOwner

Uygulamam hizmet dışında gayet iyi çalışıyor ve sonuçta aynı kodu kullandım.
nimeresam

Sanal ortam nasıl sağlanır?
shaik moeed

Virtualenv'i denedin mi?
pyOwner

1
Bu işe yaramıyor. Bir Windows Hizmeti, pywin32 paketinin yaptığı belirli bir arabirimi açığa çıkarmalıdır. Ancak, sade eski bir Python betiği yeterli olmayacaktır.
Siddhartha Gandhi

23

Hemen hemen tüm Windows çalıştırılabilir bir hizmet olarak yüklemek için birkaç alternatif vardır.

Yöntem 1: Rktools.exe'den instsrv ve srvany kullanma

Windows Home Server veya Windows Server 2003 için (WinXP ile de çalışır), Windows Server 2003 Kaynak Seti Araçları , bununla birlikte instsrv.exe ve srvany.exe adı verilen yardımcı programlarla birlikte gelir . Bu araçların kullanımına ilişkin ayrıntılar için bu Microsoft KB makalesi KB137890'a bakın .

Windows Home Server için, bu yardımcı programlar için uygun " Herhangi Bir Hizmet Yükleyici " adında harika bir kullanıcı dostu sarmalayıcı vardır .

Yöntem 2: Windows NT için ServiceInstaller kullanın

Windows NT için ServiceInstaller kullanmanın başka bir alternatifi vardır ( buradan indirilebilir ), mevcut python talimatları ile . Adından farklı olarak, Windows 2000 ve Windows XP ile de çalışır. Hizmet olarak bir python betiğinin nasıl yükleneceği ile ilgili bazı talimatlar.

Python betiği yükleme

Yeni bir hizmet oluşturmak için ServiceInstaller'ı çalıştırın. (Bu örnekte, python'un c: \ python25 dizininde yüklü olduğu varsayılmaktadır)

Service Name  : PythonTest
Display Name : PythonTest 
Startup : Manual (or whatever you like)
Dependencies : (Leave blank or fill to fit your needs)
Executable : c:\python25\python.exe
Arguments : c:\path_to_your_python_script\test.py
Working Directory : c:\path_to_your_python_script

Yükledikten sonra, Denetim Masası'nın Hizmetler uygulamasını açın, PythonTest hizmetini seçin ve başlatın.

İlk cevabımdan sonra, SO'da zaten yayınlanmış yakından ilgili Soru-Cevap olduğunu fark ettim. Ayrıca bakınız:

Python komut dosyasını hizmet olarak çalıştırabilir miyim (Windows'ta)? Nasıl?

Windows'u Python'da yazdığım bir hizmetten nasıl haberdar edebilirim?


Zaten başka benzer bir Soru-Cevap olduğunu fark ettim: stackoverflow.com/questions/32404/… stackoverflow.com/questions/34328/…
popcnt

Service Installer 64 bit mimari üzerinde çalışmadığından, seçenek 1 goto seçeneği haline gelir.
Noah Campbell

Yukarıdaki ServiceInstaller bağlantısı artık çalışmıyor. Burada buldum: sites.google.com/site/conort/…
LarsH

2
not dışında NT, en azından programcı-halk konuşmasında değil, isme mutlaka "tam tersi" olacağını düşünmüyorum . Sadece "NT markası " yerine "NT mimarisi " anlamına gelir . Bununla birlikte , wikipedia'da konuştuğuna göre , bu "resmi bir Microsoft terimi değil" diye tartışmaya açık, ancak yine de bu düşünce tarzında bir gelenek var.
n611x007

15

Adım adım nasıl çalıştığını açıklama:

1- Önce yukarıda belirtilen temel iskelete göre bir python dosyası oluşturun. Ve örneğin bir yola kaydedin: "c: \ PythonFiles \ AppServerSvc.py"

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket


class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "TestService"
    _svc_display_name_ = "Test Service"


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

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

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

    def main(self):
        # Your business logic or call to any class should be here
        # this time it creates a text.txt and writes Test Service in a daily manner 
        f = open('C:\\test.txt', 'a')
        rc = None
        while rc != win32event.WAIT_OBJECT_0:
            f.write('Test Service  \n')
            f.flush()
            # block for 24*60*60 seconds and wait for a stop event
            # it is used for a one-day loop
            rc = win32event.WaitForSingleObject(self.hWaitStop, 24 * 60 * 60 * 1000)
        f.write('shut down \n')
        f.close()

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)

2 - Bu adımda hizmetimizi kaydettirmeliyiz.

Komut istemini yönetici olarak çalıştır ve şunu yazın:

sc testService binpath = "C: \ Python36 \ Python.exe c: \ PythonFiles \ AppServerSvc.py" DisplayName = "TestService" başlat = otomatik

ilk bağımsız değişken binpath olan python.exe yolu

ikinci argüman binpath olan senin piton dosyasının yolunu biz zaten yaratılmış olduğunu

Her " = " işaretinden sonra bir boşluk bırakmanız gerektiğini unutmayın .

O zaman her şey yolundaysa, görmelisin

[SC] CreateService SUCCESS

Şimdi python hizmetiniz windows servisi olarak kuruldu. Hizmet Yöneticisi'nde ve kayıt defterinde şunları görebilirsiniz:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Testservice

3- Tamam şimdi. Hizmetinizi servis yöneticisinden başlatabilirsiniz.

Bu hizmet iskeletini sağlayan her python dosyasını yürütebilirsiniz.


Orada nasıl kullanılacağı dışarı kötü örnekler çok var SetEvent(self.hWaitStop)ve WaitForSingleObject. Muhtemelen burada seçilen cevabın düşüncesiz kopyalanmasına dayanmaktadır. Bu, hem "debug" sonundaki "stop" argümanları için temiz çalışan iyi bir yöntemdir. (SC'yi kullanma bölümü HandleCommandLineiş yaparken gereksiz görünüyor ve hata ayıklama çalıştırabilir.)
Alias_Knagg

3

pysc: Python'da Hizmet Denetim Yöneticisi

Pythonhosted.org adresinden alınan bir hizmet olarak çalıştırılacak örnek komut dosyası :

from xmlrpc.server import SimpleXMLRPCServer

from pysc import event_stop


class TestServer:

    def echo(self, msg):
        return msg


if __name__ == '__main__':
    server = SimpleXMLRPCServer(('127.0.0.1', 9001))

    @event_stop
    def stop():
        server.server_close()

    server.register_instance(TestServer())
    server.serve_forever()

Hizmet oluşturma ve başlatma

import os
import sys
from xmlrpc.client import ServerProxy

import pysc


if __name__ == '__main__':
    service_name = 'test_xmlrpc_server'
    script_path = os.path.join(
        os.path.dirname(__file__), 'xmlrpc_server.py'
    )
    pysc.create(
        service_name=service_name,
        cmd=[sys.executable, script_path]
    )
    pysc.start(service_name)

    client = ServerProxy('http://127.0.0.1:9001')
    print(client.echo('test scm'))

Hizmeti durdur ve sil

import pysc

service_name = 'test_xmlrpc_server'

pysc.stop(service_name)
pysc.delete(service_name)
pip install pysc

3
Bunun neden bir düşüş notu olduğunu bilen var mı? Güzel bir çözüm gibi görünüyor.
Jarrod Chesney

3

Pywin32 ile hizmet vermeye başladım .

Her şey yolundaydı ama servisin sistem başlangıcında 30 saniye içinde (Windows için varsayılan zaman aşımı) başlatılamaması sorunuyla karşılaştım. Benim için kritikti, çünkü Windows başlangıcı tek bir fiziksel makinede barındırılan birkaç sanal makinede aynı anda gerçekleşti ve IO yükü çok büyüktü. Hata mesajları:

Error 1053: The service did not respond to the start or control request in a timely fashion.

Error 7009: Timeout (30000 milliseconds) waiting for the <ServiceName> service to connect.

Pywin ile çok savaştım, ancak bu cevapta önerildiği gibi NSSM'yi kullandım . Göç etmek çok kolaydı.


2

python içinde nssm 3+

( .Py dosyamı pyinstaller ile .exe'ye dönüştürdüm )

nssm: daha önce söylendiği gibi

  • run nssm install {HizmetAdı}
  • NSSM'nin konsolunda:

    yol: path \ to \ your \ program.exe

    Başlangıç ​​dizini: path \ to \ your \ #same yol olarak ancak program.exe olmadan

    Bağımsız Değişkenler: boş

Projenizi .exe'ye dönüştürmek istemiyorsanız

  • ile bir .bat dosyası oluştur python {{your python.py file name}}
  • ve .bat dosyasının yolunu ayarlayın

Sanal ortam nasıl sağlanır?
shaik moeed

1

Döngü veya alt iplik kullanan eksiksiz bir pywin32 örneği

Birkaç gün boyunca bu açık ve kapalı çalıştıktan sonra, burada bulmak isterdim, pywin32'yi güzel ve kendine yeten tutmak için kullanarak cevap.

Bu, bir döngü tabanlı ve bir iş parçacığı tabanlı çözüm için tam çalışma kodudur. Python 2 ve 3 üzerinde çalışabilir, ancak en son sürümü 2.7 ve Win7'de test ettim. Döngü, yoklama kodu için iyi olmalı ve basamak daha sunucu benzeri bir kodla çalışmalıdır. Zarifce kapatmak için standart bir yolu olmayan garson wsgi sunucusu ile güzel görünüyor .

Ayrıca nota gibi, orada örnekler yükleri gibi görünüyor ki gibi bu neredeyse faydalıdır, ancak kesim ve körlemesine yapıştırılan diğer örnekler var çünkü gerçekte, yanıltıcı söyledi. Yanlış olabilirim. ama hiç beklemiyorsan neden bir etkinlik yaratıyorsun?

Bu, özellikle iplik sürümünden çıkışın ne kadar temiz olduğu konusunda, burada biraz titrek bir zeminde olduğumu hala hissediyorum, ama en azından burada yanıltıcı bir şey olmadığına inanıyorum .

Çalıştırmak için kodu bir dosyaya kopyalayın ve talimatları izleyin.

Güncelleme:

İş parçacığını sonlandırmak için basit bir bayrak kullanın. Önemli olan, "iş parçacığı bitti" yazdırmasıdır. İşbirlikçi olmayan
bir sunucu iş parçacığından çıkan daha ayrıntılı bir örnek için, garson wsgi sunucusu hakkındaki yazımı görün .

# uncomment mainthread() or mainloop() call below
# run without parameters to see HandleCommandLine options
# install service with "install" and remove with "remove"
# run with "debug" to see print statements
# with "start" and "stop" watch for files to appear
# check Windows EventViever for log messages

import socket
import sys
import threading
import time
from random import randint
from os import path

import servicemanager
import win32event
import win32service
import win32serviceutil
# see http://timgolden.me.uk/pywin32-docs/contents.html for details


def dummytask_once(msg='once'):
    fn = path.join(path.dirname(__file__),
                '%s_%s.txt' % (msg, randint(1, 10000)))
    with open(fn, 'w') as fh:
        print(fn)
        fh.write('')


def dummytask_loop():
    global do_run
    while do_run:
        dummytask_once(msg='loop')
        time.sleep(3)


class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        global do_run
        do_run = True
        print('thread start\n')
        dummytask_loop()
        print('thread done\n')

    def exit(self):
        global do_run
        do_run = False


class SMWinservice(win32serviceutil.ServiceFramework):
    _svc_name_ = 'PyWinSvc'
    _svc_display_name_ = 'Python Windows Service'
    _svc_description_ = 'An example of a windows service in Python'

    @classmethod
    def parse_command_line(cls):
        win32serviceutil.HandleCommandLine(cls)

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.stopEvt = win32event.CreateEvent(None, 0, 0, None)  # create generic event
        socket.setdefaulttimeout(60)

    def SvcStop(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                            servicemanager.PYS_SERVICE_STOPPED,
                            (self._svc_name_, ''))
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.stopEvt)  # raise event

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                            servicemanager.PYS_SERVICE_STARTED,
                            (self._svc_name_, ''))
        # UNCOMMENT ONE OF THESE
        # self.mainthread()
        # self.mainloop()

    # Wait for stopEvt indefinitely after starting thread.
    def mainthread(self):
        print('main start')
        self.server = MyThread()
        self.server.start()
        print('wait for win32event')
        win32event.WaitForSingleObject(self.stopEvt, win32event.INFINITE)
        self.server.exit()
        print('wait for thread')
        self.server.join()
        print('main done')

    # Wait for stopEvt event in loop.
    def mainloop(self):
        print('loop start')
        rc = None
        while rc != win32event.WAIT_OBJECT_0:
            dummytask_once()
            rc = win32event.WaitForSingleObject(self.stopEvt, 3000)
        print('loop done')


if __name__ == '__main__':
    SMWinservice.parse_command_line()

0

Kullanarak kabul edilen cevap win32serviceutilişe yarıyor ancak karmaşık ve hata ayıklamayı ve değişiklikleri zorlaştırıyor. Öyle uzak NSSM (kullanımı daha kolay olmayan Sucking Servis Yöneticisi) . Normal bir python programı yazar ve rahatça hata ayıklarsınız ve sonunda çalıştığında, bir dakikadan daha kısa bir sürede bir hizmet olarak yüklemek için NSSM kullanırsınız:

Yükseltilmiş (admin) bir komut isteminden çalıştırırsınız nssm.exe install NameOfYourServiceve şu seçenekleri doldurursunuz:

  • yol : (python.exe dosyasının yolu C:\Python27\Python.exe)
  • Bağımsız Değişkenler : (python betiğinizin yolu, ör. c:\path\to\program.py)

Bu arada, programınız bir günlük dosyasında tutmak istediğiniz yararlı mesajlar yazdırırsa, NSSM de bunu ve sizin için çok daha fazlasını yapabilir.


Evet, bu Adriano'nun cevabının bir kopyası. Bu cevabı iptal ettim ve düzenlemeye çalıştım ama düzenlemelerden sonra yeni bir cevaba bakıyordum.
ndemou

Sanal ortam nasıl sağlanır?
shaik moeed

0

VENV veya Pycharm'da hizmet oluşturmak isteyen herkes için !!!!!!!

Tüm anwsers okuduktan ve bazı komut dosyaları oluşturmak sonra, eğer çalıştırabilirsiniz python service.py installve python service.py debug, ancak python service.py starthiçbir yanıt yok.

Belki venv probleminden kaynaklanır, çünkü windows hizmeti exec tarafından hizmetinize başlar PROJECT\venv\Lib\site-packages\win32\pythonservice.exe.

Daha fazla hatanın ayrıntılarını bulmak için powershellveya cmdhizmetinizi test etmek için kullanabilirsiniz .

PS C:\Users\oraant> E:

PS E:\> cd \Software\PythonService\venv\Lib\site-packages\win32

PS E:\Software\PythonService\venv\Lib\site-packages\win32> .\pythonservice.exe -debug ttttt
Debugging service ttttt - press Ctrl+C to stop.
Error 0xC0000004 - Python could not import the service's module

Traceback (most recent call last):
  File "E:\Software\PythonService\my_service.py", line 2, in <module>
    import win32serviceutil
ModuleNotFoundError: No module named 'win32serviceutil'

(null): (null)

Benim gibi bir hata alırsanız, cevabımı başka bir soruda kontrol edebilirsiniz, düzelttim ve kodumu buraya gönderdim .


-1

https://www.chrisumbel.com/article/windows_services_in_python

  1. PySvc.py'yi takip edin

  2. dll klasörünü değiştirme

Bunun eski olduğunu biliyorum ama buna sonsuza kadar takılı kaldım. Benim için bu özel sorun bu dosyayı kopyalayarak çözüldü - pywintypes36.dll

Kimden -> Python36 \ Lib \ site-paketleri \ pywin32_system32

Alıcı -> Python36 \ Lib \ site-paketleri \ win32

setx /M PATH "%PATH%;C:\Users\user\AppData\Local\Programs\Python\Python38-32;C:\Users\user\AppData\Local\Programs\Python\Python38-32\Scripts;C:\Users\user\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\pywin32_system32;C:\Users\user\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\win32
  1. python klasörünün yolunu

cd C:\Users\user\AppData\Local\Programs\Python\Python38-32

  1. NET START PySvc
  2. NET STOP PySvc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.