欢迎访问宙启技术站
智能推送

Python中使用win32service模块实现Windows服务的定时任务

发布时间:2023-12-26 15:24:48

使用win32service模块可以在Windows系统上创建和管理服务。定时任务可以通过创建一个Windows服务来实现。下面是一个使用win32service模块创建定时任务的例子。

首先,需要安装pypiwin32模块,可以使用以下命令安装:

pip install pypiwin32

然后,创建一个Python脚本,来定义服务的行为。以下是一个简单的例子,演示了如何创建一个每隔10秒打印一次当前时间的服务:

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import datetime
import time


class MyService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'MyService'
    _svc_display_name_ = 'My Service'

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.is_running = True

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        self.is_running = False

    def SvcDoRun(self):
        rc = None
        while self.is_running:
            # 执行定时任务的代码
            current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            print(f"Current Time: {current_time}")
            time.sleep(10)

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

在这个例子中,定义了一个名为MyService的类,继承自win32serviceutil.ServiceFramework。在这个类中,需要实现SvcDoRun方法,在其中编写定时任务的代码。在这个例子中,定时任务的代码是每隔10秒打印当前时间。可以根据需要修改这部分代码。

接下来,在Python脚本所在目录下打开命令提示符,以管理员身份运行以下命令来安装服务:

python script_name.py install

其中,script_name.py是脚本的文件名。

安装成功后,可以通过以下命令来启动服务:

python script_name.py start

可以使用以下命令来停止服务:

python script_name.py stop

使用以下命令来删除服务:

python script_name.py remove

通过这些命令,可以创建一个每隔10秒执行一次定时任务的Windows服务。