目前需要在windows構(gòu)建一個(gè)小接口,使用cmd命令行運(yùn)行服務(wù)有一點(diǎn)不方便茵瘾,然后看網(wǎng)上有沒有flask服務(wù)化的文章刹帕。
首先使用pywin32可以構(gòu)建python service
pip下載 pywin32
pip install pywin32
# 注意事項(xiàng): 不要在虛擬環(huán)境中安裝铣耘,安裝后會(huì)缺少某些包
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" # 服務(wù)名
_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) # 服務(wù)運(yùn)行函數(shù)
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(HelloFlaskSvc)
基本代碼比較簡(jiǎn)單,但是現(xiàn)在還不能運(yùn)行程序
配置環(huán)境變量
Python36\Lib\site-packages\win32
Python36\Lib\site-packages\pywin32_system32
這兩個(gè)變量配置到環(huán)境path中
啟動(dòng)服務(wù) 以管理員權(quán)限運(yùn)行【否則報(bào)錯(cuò): Error installing service: 拒絕訪問攘宙。 (5)】
服務(wù)安裝
python win_flask.py install
讓服務(wù)自動(dòng)啟動(dòng)
python win_flask.py --startup auto install
啟動(dòng)服務(wù)
python win_flask.py start
重啟服務(wù)
python win_flask.py restart
停止服務(wù)
python win_flask.py stop
刪除/卸載服務(wù)
python win_flask.py remove
打開網(wǎng)頁(yè)便可以訪問服務(wù)了