很多时候我们希望python程序能开机启动,除了将程序添加到开机启动项(startup文件夹)外,如果是不需要界面的程序,将程序添加到系统服务是一个更好的解决方法。
这篇文章介绍一种简单的将python程序注册为windows服务的方法。
写一个示例程序
首先我们写一个简单的myService.py
from cgitb import handler
import logging
from time import sleep
from loguru import logger
# 日志输出到文件,设置日志等级和格式
logger=logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler=logging.FileHandler('myService.log')
handler.setLevel(logging.INFO)
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(message)s'))
logger.addHandler(handler)
# 服务启动后打印日志
logger.info('myService is starting...')
while True:
try:
# 每隔3秒打印日志
logger.info('myService is running...')
sleep(3)
except KeyboardInterrupt as e:
# 用户主动退出时打印日志
logger.info('myService is stopped by user')
break
logger.info('myService is stopped')
运行程序后,可以看到myService.logw文件中日志输出如下
2022-04-23 21:17:33,494:INFO:myService is starting...
2022-04-23 21:17:33,495:INFO:myService is running...
2022-04-23 21:17:36,496:INFO:myService is running...
2022-04-23 21:17:39,496:INFO:myService is running...
2022-04-23 21:17:42,497:INFO:myService is running...
2022-04-23 21:17:44,985:INFO:myService is stopped by user
2022-04-23 21:17:44,986:INFO:myService is stopped
将程序打包为exe文件
使用pyinstaller将程序打包成exe文件:
pyinstaller -F myService.py
使用NSSM将myService.exe注册为系统服务
在nssm所在目录打开cmd命令行,执行nssm install myservice指令。
右键单击myservice服务启动即可运行服务了。运行几秒钟后,再右键停止服务,我们看一下日志输出正常。
2022-04-23 21:37:48,531:INFO:myService is starting...
2022-04-23 21:37:48,532:INFO:myService is running...
2022-04-23 21:37:51,533:INFO:myService is running...
2022-04-23 21:37:54,535:INFO:myService is running...
2022-04-23 21:37:57,535:INFO:myService is running...
2022-04-23 21:38:00,536:INFO:myService is running...
2022-04-23 21:38:03,537:INFO:myService is running...
2022-04-23 21:38:06,537:INFO:myService is running...
2022-04-23 21:38:09,538:INFO:myService is running...
2022-04-23 21:38:12,539:INFO:myService is running...
2022-04-23 21:38:13,896:INFO:myService is stopped by user
2022-04-23 21:38:13,896:INFO:myService is stopped
我们可以看到注册为服务后,就不会像直接双击运行exe文件那样出现黑色控制台了。
本文暂时没有评论,来添加一个吧(●'◡'●)