向python服务传递参数

2024-06-26 14:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些关于python服务的帮助。在

我有一个用Python编写的服务。我需要做的是给它一些论点。让我举个例子来解释一下。在

假设我有一个服务,它什么都不做,只在日志中写一些东西。我想在日志中多次写入相同的内容,所以我使用循环。我想在我启动服务时传递循环计数器,但我不知道如何操作。我开始服务时:

win32serviceutil.HandleCommandLine(WinService)

我在找类似的东西

^{pr2}$

我真的不在乎它是怎么做的,只要我能把论点传给它。我一直在努力让这件事在一天中的大部分时间都没有成功。此外,服务不是直接运行的,而是导入然后从那里运行的。在

编辑:

希望这是一个很好的例子。在

这个在里面WindowsService.py公司名称:

import win32serviceutil, win32service, win32event, servicemanager, win32serviceutil

class LoopService(win32serviceutil.ServiceFramework):
    _svc_name_ = "LoopService"
    _svc_description_ = "LoopService"
    _svc_display_name_ = "LoopService" 

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

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

    def SvcDoRun(self):
        i = 0;
        while i < 5:
            servicemanager.LogInfoMsg("just something to put in the log");
            i += 1
        win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)

以下是主脚本:

import service.WindowsService, win32serviceutil
win32serviceutil.HandleCommandLine(service.WindowsService.LoopService);

现在,循环将执行固定的次数。我只想简单地把价值传递给服务。不在乎怎么做。在


Tags: nameimportselfinitdefserviceutilmanager
2条回答

我认为你不能直接把争论传递给服务部门。您可能可以使用环境(在启动服务之前设置环境变量并从服务中读取)。在

抱歉,没有足够的信息回答您的问题。这似乎是一个特定于应用程序的事情。在

我唯一能想到的就是回顾一下win32的代码serviceutil.HandleCommandLine方法和WinService类来确定哪个写入日志。然后,您必须创建一个子类并重写负责写入日志的方法以接收附加参数。最后,您必须尝试从原始类到新类的所有引用。在

在问题编辑后补充道。在

更清楚,但仍然不够。你需要回顾一下win32serviceutil.HandleCommandLine看看它是如何调用的服务.WindowsService.LoopService。初始化。特别是,如何HandleCommandLine生成参数以及如何控制它。在

如果您很着急,您可以:

class LoopService(win32serviceutil.ServiceFramework):
    repetitions = 5
    # ... 

    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        self.repetitions = LoopService.repetitions

    # ...

    def SvcDoRun(self):
        for i in range(self.repetitions):
            servicemanager.LogInfoMsg("just something to put in the log");
        win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)

然后你可以控制重复改变的次数循环服务.重复在创建新实例之前。在

^{pr2}$

这很管用,但很难看。尝试控制参数,然后设置自我重复相应地。在

相关问题 更多 >