目前需要在windows构建一个小接口,使用cmd命令行运行服务有一点不方便,然后看网上有没有flask服务化的文章。
首先使用pywin32可以构建python service
pip下载 pywin32
pip install pywin32
# 注意事项: 不要在虚拟环境中安装,安装后会缺少某些包
pip install flask==0.11 # flask 1.0的包未能成功使用Windows service
基本代码win_flask.py
import win32serviceutil
import win32service
import win32event
import win32evtlogutil
import servicemanager
import socket
import time
import os
import sys
sys.path.append(os.path.dirname(__name__))
from myapp import app
class HelloFlaskSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "windows service Flask" # 服务名
_svc_display_name_ = "windows service Flask" # 描述
def __init__(self, *args):
win32serviceutil.ServiceFramework.__init__(self, *args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(5)
self.stop_requested = False
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.ReportServiceStatus(win32service.SERVICE_STOPPED)
logging.info('Stopped service ...')
self.stop_requested = True
def SvcDoRun(self):
servicemanager.LogMsg(
servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,'')
)
self.main()
def main(self):
app.run(host="0.0.0.0", port=5000) # 服务运行函数
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(HelloFlaskSvc)
基本代码比较简单,但是现在还不能运行程序
配置环境变量
Python36\Lib\site-packages\win32
Python36\Lib\site-packages\pywin32_system32
这两个变量配置到环境path中
启动服务 以管理员权限运行【否则报错: Error installing service: 拒绝访问。 (5)】
服务安装
python win_flask.py install
让服务自动启动
python win_flask.py --startup auto install
启动服务
python win_flask.py start
重启服务
python win_flask.py restart
停止服务
python win_flask.py stop
删除/卸载服务
python win_flask.py remove
打开网页便可以访问服务了
网友评论