优草派 > 问答 > Python

以windows service方式运行Python程序的方法

作者:hsq357     

在Windows操作系统中,运行Python程序的方式有很多种,比如通过命令行方式、通过IDE工具等等。但是有些情况下,我们需要将Python程序作为Windows Service来运行,这样可以实现程序的自启动、定时运行、后台运行等功能,提高程序的稳定性和可靠性。本文将从多个角度介绍如何以Windows Service方式运行Python程序。

一、Windows Service介绍

Windows Service是一种在Windows操作系统后台运行的程序,它可以在Windows启动时自动启动,并在后台长时间运行,不需要用户干预。Windows Service可以通过Windows Service控制器来管理,可以启动、停止、暂停、恢复等操作。Windows Service通常用于实现系统服务、网络服务等。

二、Python程序转化为Windows Service

将Python程序转化为Windows Service有多种方法,下面介绍其中两种常用的方法。

1.使用win32serviceutil库

win32serviceutil库是Python中用于实现Windows Service的库,它提供了一些方便的方法来实现Windows Service。使用该库创建Windows Service主要包括以下步骤:

(1)编写Python程序

首先需要编写Python程序,该程序需要有一个主函数,用于实现Windows Service的主要功能。例如:

```

import time

import threading

def main():

while True:

print('Hello, world!')

time.sleep(1)

if __name__ == '__main__':

main()

```

该程序的主要功能是每秒钟打印一次“Hello, world!”。

(2)创建Windows Service

使用win32serviceutil库创建Windows Service需要在cmd命令行中执行如下命令:

```

python win32serviceutil.py --startup auto install \

--service-name "MyService" --display-name "My Service" \

--description "This is my service" \

python.exe E:\Python\myservice.py

```

其中,--startup参数指定Windows Service的启动类型,auto表示自动启动;--service-name参数指定Windows Service的名称;--display-name参数指定Windows Service的显示名称;--description参数指定Windows Service的描述信息;最后一个参数是Python程序的路径。

执行上述命令后,Windows Service就会被创建并注册到Windows Service控制器中。

(3)启动Windows Service

使用如下命令启动Windows Service:

```

net start MyService

```

其中,MyService是Windows Service的名称。

(4)停止Windows Service

使用如下命令停止Windows Service:

```

net stop MyService

```

(5)卸载Windows Service

使用如下命令卸载Windows Service:

```

python win32serviceutil.py remove MyService

```

其中,MyService是Windows Service的名称。

2.使用NSSM工具

NSSM(Non-Sucking Service Manager)是一款开源的Windows Service管理工具,它可以将任何可执行文件转化为Windows Service。使用NSSM创建Windows Service主要包括以下步骤:

(1)下载并安装NSSM工具

在https://nssm.cc/download下载NSSM工具,解压后将nssm.exe文件复制到Python程序所在的目录下。

(2)创建Windows Service

使用如下命令创建Windows Service:

```

nssm install MyService E:\Python\python.exe E:\Python\myservice.py

```

其中,MyService是Windows Service的名称,E:\Python\python.exe是Python解释器的路径,E:\Python\myservice.py是Python程序的路径。

执行上述命令后,NSSM会弹出一个对话框,可以设置Windows Service的名称、描述、启动类型等信息。

(3)启动Windows Service

使用如下命令启动Windows Service:

```

net start MyService

```

其中,MyService是Windows Service的名称。

(4)停止Windows Service

使用如下命令停止Windows Service:

```

net stop MyService

```

(5)卸载Windows Service

使用如下命令卸载Windows Service:

```

nssm remove MyService

```

其中,MyService是Windows Service的名称。

三、Python程序实现Windows Service功能

将Python程序转化为Windows Service后,需要实现Windows Service的功能。Python程序需要实现以下两个函数:

1.服务入口函数

服务入口函数用于启动和停止Windows Service,它可以通过win32serviceutil库中的StartServiceCtrlDispatcher方法来实现。代码如下:

```

import win32serviceutil

import win32service

import win32event

import servicemanager

class MyService(win32serviceutil.ServiceFramework):

_svc_name_ = 'MyService'

_svc_display_name_ = 'My Service'

_svc_description_ = 'This is my service'

def __init__(self, args):

win32serviceutil.ServiceFramework.__init__(self, args)

self.stop_event = win32event.CreateEvent(None, 0, 0, None)

def SvcStop(self):

self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)

win32event.SetEvent(self.stop_event)

def SvcDoRun(self):

servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,

servicemanager.PYS_SERVICE_STARTED,

(self._svc_name_, ''))

self.main()

def main(self):

while True:

print('Hello, world!')

time.sleep(1)

if __name__ == '__main__':

win32serviceutil.HandleCommandLine(MyService)

```

在该代码中,MyService类继承自win32serviceutil.ServiceFramework类,重载了SvcStop和SvcDoRun方法。SvcStop方法用于停止Windows Service,SvcDoRun方法用于启动Windows Service。在SvcDoRun方法中,可以调用自定义的main方法来实现Windows Service的功能,例如在本例中每秒钟打印一次“Hello, world!”。

2.主函数

主函数用于解析命令行参数,创建Windows Service实例并启动Windows Service。代码如下:

```

if __name__ == '__main__':

win32serviceutil.HandleCommandLine(MyService)

```

在该代码中,调用win32serviceutil.HandleCommandLine方法来解析命令行参数,并创建MyService实例并启动Windows Service。

四、总结

本文介绍了将Python程序转化为Windows Service的方法,包括使用win32serviceutil库和NSSM工具两种方法。同时还介绍了Python程序实现Windows Service功能的方法,包括实现服务入口函数和主函数。通过将Python程序转化为Windows Service,可以实现程序的自启动、定时运行、后台运行等功能,提高程序的稳定性和可靠性。

5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
相关问题
anaconda3安装后找不到
安卓超强文本编辑器中文版
在线代码编辑
怎么读取mat文件
查看更多

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024