-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
windows下实现python后台进程 #20
Comments
按以上的例子重写start接口,安装服务成功后,启动服务报错:
是否start方法还需包含其他处理逻辑? |
@hepingtao 需要安装 pywin32>=219 |
我遇到同样的问题,服务注册成功后,执行文件是"C:\Python33\lib\site-packages\win32\PythonService.exe",启动时提示 pywin32版本为219 @hepingtao @restran |
@hx78 我也遇到同样的问题了,请问您是怎么解决的呢?非常感谢~ |
同问 |
把你的python的路径添加到系统变量的Path中,而不仅仅在用户的系统变量中添加~ |
资源管理器进入 我在Win10+Py3.6环境下已经测试成功。 |
python作为一门脚本语言,其丰富的库使其能够干的事情尤其多。我们或许会有这样的需求,把python程序作为后台进程启动。也就是说,没有界面,没有终端。相当于linux下的一个概念:守护进程(daemon)。
如果你的程序是跑在linux上,那么只要你理解了python os.fork的使用,就可以自己构建出一个daemon的实现。windows下不支持fork,但是有另外一个概念:服务(service)。通常我们在windows下安装一个软件的时候,如果它有后台服务的功能,那么它都会注册一个服务,比如:google更新服务、QQ音乐服务、VMWare等。通过路径:计算机 -> 管理 -> 服务和应用程序 -> 服务 可以查看服务列表。我们可以对服务进行控制:启动、停止、重启动。
如此看来,windows下服务的概念就相当于后台进程了,它不必有界面和终端,我们可以在服务列表对其进行控制(启动、停止、重启动)。接下来,我们就来看看如何利用python实现一个服务。
软件安装准备
除了需要python包之外,还需要一个windows下的python库:pywin32。具体安装过程就不重述了,测试pywin32是否安装好的方法是:
如果无报错,则表示pywin32安装成功。
服务类
其核心类为win32serviceutil.ServiceFramework,代表服务的基类,实现我们自己的服务需要继承该类。
成员变量:
接口:
一般来说,我们把程序的主逻辑放到SvcDoRun 里,程序结束的清理工作放到SvcStop 里。ServiceFramework 自己有一套对服务的控制机制,大概是如下的样子:
另外,在python程序的main下, 要使用pywin32的接口来指定需要通过命令行执行的类:
实现一个服务类
这里我们定义一个类PySvc,并提供了两个接口 start和stop。使用的时候,我们只需继承该类,并重写start和stop接口即可。如下的一个实例:
这样以来,我们可以进行以下操作了:
The text was updated successfully, but these errors were encountered: