python 脚本或者flask 注册成为windows服务

分享下脚本注册成为win服务

这个借鉴了其他大佬得 具体是谁忘记了有机会推荐 今天也是找了之前得改出来得

首先安装三个模块 最后一个是定时任务如果不需要可以不装

pip install psutil
pip install pywin32
pip install apscheduler
下面贴代码
import os
import sys
import random
import socket

import time

import psutil
import servicemanager
import win32con
import win32event
import win32process
import win32security
import win32service
import win32serviceutil
import win32timezone
from apscheduler.schedulers.background import BackgroundScheduler

sys.stdout = sys.stderr = open(os.devnull,'w')
class SpiderService(win32serviceutil.ServiceFramework):

    # 注册服务名
    _svc_name_ = 'PS'
    # 服务在windows系统中显示的名称
    _svc_display_name_ = 'Python Service'
    # 服务描述
    _svc_description_ = 'Python Service Description'

    @classmethod
    def parse_command_line(cls):
        '''
        ClassMethod 解析命令行
        '''
        win32serviceutil.HandleCommandLine(cls)

    def __init__(self, args):
        '''
        winservice的构造函数
        '''
        self.scheduler = BackgroundScheduler()
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.stop_event = win32event.CreateEvent(None, 0, 0, None)
        socket.setdefaulttimeout(60)

    def SvcStop(self):
        '''
        当服务被要求停止时调用
        '''
        self.stop()
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.stop_event)
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)
        self.run = False

    def SvcDoRun(self):
        '''
        当服务被要求启动时调用
        '''
        self.start()
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_, ''))

        try:
            username = 'admin'
            password = 'admin'
            domain = ''
            token = win32security.LogonUser(
                username,
                domain,
                password,
                win32con.LOGON32_LOGON_SERVICE,
                win32con.LOGON32_PROVIDER_DEFAULT
            )
            win32security.ImpersonateLoggedOnUser(token)

            cmd = '<a command line programe>'
            cwd = '<a work dir>'
            env = os.environ
            priority = win32con.NORMAL_PRIORITY_CLASS
            startup = win32process.STARTUPINFO()

            (hProcess, hThread, dwProcessId, dwThreadId) = \
                win32process.CreateProcessAsUser(token, None, cmd, None, None, True, priority, env, cwd, startup)

            process = psutil.Process(dwProcessId)
            return_code = process.wait()
            print('return code: %s' % str(return_code))

        except win32security.error as e:
            print(e)

        self.main()

        win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
        #&#x8FD9;&#x4E2A;&#x5982;&#x679C;&#x4F60;&#x662F;&#x540E;&#x53F0;&#x542F;&#x52A8;&#x5F97;flask &#x540E;&#x53F0;&#x670D;&#x52A1;&#x8981;&#x52A0;&#x4E0A;
        while True:
            time.sleep(10)

    def __schedule(self):
        #&#x6DFB;&#x52A0;&#x5B9A;&#x65F6;&#x4EFB;&#x52A1;
        self.scheduler.add_job(
            self.ceshi,
            'interval',
            seconds=10
        )
    #&#x5B9A;&#x65F6;&#x4EFB;&#x52A1;
    def ceshi(self):
        while self.isrunning:
            random.seed()
            x = random.randint(1, 1000000)
            Path(f'c:\\{x}.txt').touch()
            time.sleep(5)

    def start(self):
        self.isrunning = True

    def stop(self):
        self.isrunning = False

    def main(self):
        self.__schedule()
        self.scheduler.start()

if __name__ == '__main__':
    if len(sys.argv) == 1:
        try:
            event_src_dll = os.path.abspath(servicemanager.__file__)
            #&#x8FD9;&#x91CC;&#x9700;&#x8981;&#x6CE8;&#x610F;  &#x4ED6;&#x91CC;&#x8FB9;&#x5F97;&#x53C2;&#x6570;&#x8981;&#x662F;&#x4F60;&#x5F97;&#x7C7B;&#x540D;SpiderService &#x4E0B;&#x8FB9;&#x540C;&#x6837;&#x5F97;
            servicemanager.PrepareToHostSingle(SpiderService)
            servicemanager.Initialize('SpiderService', event_src_dll)
            servicemanager.StartServiceCtrlDispatcher()
        except win32service.error as details:
            if details == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:
                win32serviceutil.usage()
    else:
        win32serviceutil.HandleCommandLine(SpiderService)
</a></a>
命令 更多得可以搜一下 install 之后会安装到服务里边但是并没有开启
python xxx.py install
python xxx.py start
python xxx.py stop
python xxx.py remove
打包 我这边用得是pyinstaller
pyinstaller -F -w xxx.py
#&#x6253;&#x5305;&#x5B8C;&#x6210;&#x540E; &#x547D;&#x4EE4;&#x662F;&#xFF1A;&#xFF08;&#x4E0E;&#x4E4B;&#x524D;&#x5F97;&#x5DEE;&#x4E0D;&#x591A;&#xFF09;
xxx.exe install
xxx.exe start
...

Original: https://www.cnblogs.com/carl-/p/15671692.html
Author: Carl-
Title: python 脚本或者flask 注册成为windows服务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684738/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 六、IDEA安装

    一、IDEA下载与安装 1.1、下载IDEA安装包 博主在这里给大家准备了一个64位操作系统的IDEA以便大家下载(使用的是迅雷)点击此处下载提取码:dgiy 如果其他小伙伴的电脑…

    技术杂谈 2023年6月21日
    084
  • Java日志框架

    流行的日志框架 JUL Log4j JCL SLF4j Logback Log4j2 总结 依赖导入总结 日志门面 日志实现 桥接器、适配器理解 使用logback + slf4j…

    技术杂谈 2023年7月11日
    081
  • 2022.20 架构设计随思

    最近在做一个系统的设计,对软件架构设计又有了一些学习思考,就把当下思考认同的一些点记录一下。 需求总是会不断变化,软件架构要根据业务发展不断变化,在做架构设计时不要试图一步到位设计…

    技术杂谈 2023年5月30日
    080
  • 设计模式是什么,为什么要学习设计模式?

    在软件工程中, 设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 这个术语是由埃里希·伽玛(Erich Gamma)等人在1…

    技术杂谈 2023年5月31日
    073
  • Python3网络爬虫–爬取有声小说(附源码)

    一.目标 1.首页 2.网页源代码 二.爬取详情页 1.查看详情页 2.小说详情 3.小说简介 4.播放列表 三.爬取小说音频 1.确定数据加载方式 2.寻找真实音频播放地址 3….

    技术杂谈 2023年6月21日
    094
  • SpringBoot教程,吃透这些知识点,超过90%的Java面试者

    动力节点王鹤老师的SpringBoot入门系列课程,通俗易懂,基于SpringBoot2.4版本讲解。 从细节入手,每个事例先讲解pom.xml中的重要依赖,其次applicati…

    技术杂谈 2023年7月25日
    064
  • 【考研】C语言

    考研C语言 收录数据结构会用到的C语言知识,建议有基础的情况下再学习,针对性学习即可。 往后的学习要多从内存角度去学习计算机的知识 1. 数组 1.1 一维数值数组 具备相同的数据…

    技术杂谈 2023年7月10日
    071
  • Python去水印方法(无需安装任何库)

    分享一个Python 自带库去水印的方法 今天用WPS将PDF转图片,发现没有会员就会自带水印,于是萌生了用Python去水印的想法 from itertools import p…

    技术杂谈 2023年7月24日
    071
  • 使用python操作HDF5文件

    HDF Hierarchical Data Format,又称HDF5 安装: pip install h5py 对于数据集需要:先创建h5文件,再去读h5文件将dataset放在…

    技术杂谈 2023年7月25日
    062
  • idea中terminal使用npm报不是内部或外部命令,也不是可运行的程序 或批处理文件。

    win10电脑装好node以及npm环境之后,在idea工具使用npm命令存在以下问题: 解决办法:有两个。 (一)部分人可行:将shell path地址换成如下。C:\Windo…

    技术杂谈 2023年5月31日
    099
  • 游戏UI特效教程 章鱼学院UI动效基础课(68课)

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    063
  • HashMap详解

    HashMap详解 HashMap相关介绍 HashMap是Java中的比较常见的集合,主要存放的是键值对,以key-value的形式存储,不是线程安全的。它里面的存储的key和v…

    技术杂谈 2023年6月21日
    089
  • NYOJ127 星际之门(一)【定理】

    描写叙述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门,它利用虫洞技术。一条虫洞能够连通随意的两个星系,使人们不必再待待便…

    技术杂谈 2023年5月31日
    084
  • Oracle备份与还原(实用版)

    Oracle备份与还原 EXP&#x548C;IMP&#x662F;&#x5BA2;&#x6237;&#x7AEF;&#x5DE5;…

    技术杂谈 2023年6月21日
    0114
  • http和https的区别

    http协议和https协议的区别: 传输信息安全性不同、 连接方式不同、 端口不同、 证书申请方式不同 一、传输信息安全性不同 1、http协议:是超文本传输协议,信息是明文传输…

    技术杂谈 2023年5月31日
    076
  • 老生常谈系列之Aop–Spring Aop源码解析(一)

    老生常谈系列之Aop–Spring Aop源码解析(一) 前言 上一篇文章老生常谈系列之Aop–Spring Aop原理浅析大概阐述了动态代理的相关知识,并…

    技术杂谈 2023年7月25日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球