老板突然把叫我进办公室,问我:“你python为什么没有启动?”

引言

今天老板突然把我叫进办公室,搞得我非常紧张。推门进去一看,老板脸阴沉沉的。

“你的python程序为什么没有启动?”老板指着电脑屏幕,语气不太友善。

我过去一看,原来程序根本没有运行起来:“你程序没打开!”

老板一听就不乐意了:“程序还需要打开吗?不应该开机就启动了吗?”

嘘,原来如此!Linux 下有 systemctl 运行程序服务,但老板使用的 windows 电脑并没有做开机启动,所以当他重新启动电脑以后根本没有运行程序。

我赶紧回到工位,通过 python 来将服务进行开机启动。

windows服务

我们可以通过 windows 的服务来运行我们的程序,你可以在 任务管理器 的服务中找到很多服务,现在我们做的就是创建服务,并添加到系统中。

服务截图

安装库

pip install pywin32

测试代码

我们将添加一个 python服务 到系统中,该服务将在桌面上创建一个 test.txt 的文件,每5秒钟 将在其中添加一行内容来确认服务的运行。

import os
import time
import win32serviceutil
import win32service
import servicemanager
import threading


class MyService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'python服务'
    _svc_display_name_ = '测试python服务'
    _svc_description_ = '这是个测试用的python服务'

    def __init__(self, *args, **kwargs):
        win32serviceutil.ServiceFramework.__init__(self, *args, **kwargs)
        self.event = threading.Event()
        self.txt_path = r'C:\Users\xxxx\Desktop\test.txt'

        if not os.path.exists(self.txt_path):
            with open(self.txt_path, 'w') as f:
                f.write('')

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        self.event.set()

    def SvcDoRun(self):
        self.ReportServiceStatus(win32service.SERVICE_START_PENDING)

        servicemanager.LogInfoMsg("Service starting...")

        self.ReportServiceStatus(win32service.SERVICE_RUNNING)

        self.main()

    def main(self):
        while not self.event.is_set():
            with open(self.txt_path, 'a') as f:
                now_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
                f.write(f'{now_str} Service is running...\n')

            time.sleep(5)


if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(MyService)

安装服务

请使用 以管理员身份运行 打开控制台,并运行命令:

python main.py install

注意:请勿使用 虚拟环境 来安装或启动服务,这将导致报错:Error starting service: 服务没有及时响应启动或控制请求。

查看服务

打开运行,输入 services.msc

运行输入services.msc

安装成功的服务

可以看到我们的服务已经成功安装,是时候运行启动它了!

启动服务

python main.py start

服务启动

文件创建成功

停止服务

python main.py stop

删除服务

python main.py remove

开机启动

python main.py --startup auto install

如果使用 windows服务 进行启动,请注意:如果你的程序带有可视化界面,可能会出现无法展示的情况。

结尾

很好,我们的服务已经可以开机启动并且能够自动重启了,我能看到老板脸上的笑容正在绽放,我悬着心的也落了下来。

如果你有需要开机启动的服务,不妨去试试!

相关文章

30天学会Python编程:9. Python文件与IO操作

9.1 文件操作基础9.1.1 文件操作流程9.1.2 文件打开模式表9-1 Python文件打开模式模式描述文件存在文件不存在'r'只读正常打开报错'w'写入清空内容...

Python中列出目录下所有文件的方法

技术背景在Python编程中,经常需要列出目录下的所有文件,根据不同的需求,可能只需要列出当前目录下的文件,也可能需要递归列出子目录下的所有文件。Python提供了多种方法来实现这一功能,下面将详细介...

Python文件复制方法详解

技术背景在Python编程中,文件复制是一项常见的操作。无论是数据备份、文件迁移还是其他应用场景,都可能需要将一个文件的内容复制到另一个文件或位置。Python提供了多种方式来实现文件复制,不同的方法...

深入了解Python的setup.py文件

技术背景在Python开发中,经常需要安装和管理各种包和模块。setup.py文件是Python的一个重要工具,它是使用Distutils(Python标准库中用于分发Python模块的工具)打包和分...

和尧名大叔一起从0开始学Python编程-简单读写文件

0基础自学编程是很痛苦的一件事情,所以我想把自己学习的这个过程记录下来,让想学编程的人少走弯路,大叔文化程度较低,可能会犯一些错误,欢迎大家督促我。今天,我们来学习一下用Python简单读写文件,这里...