c语言编程笔录

首页 >   > 笔记大全

笔记大全

自动触发python程序python程序开机自启

更新时间:2023-07-14

问题描述

在本次需求中,我们需要进行两个任务。第一个任务是编写Python程序,以响应系统中的某些事件(例如启动、关闭等)。第二个任务是使该程序能够开机自启动,以便在系统启动时立即运行。

解决方案

我们可以解决这个问题,通过以下两个步骤:

  1. 注册Python程序为系统服务
  2. 在注册表中添加一个条目以启用该服务

下面将详细讨论这两个步骤的实现。

注册Python程序为系统服务

在Windows平台上,我们可以使用pywin32来注册一个Python程序作为系统服务。


import win32serviceutil
import win32service
import win32event
import servicemanager
import socket

class PythonService(win32serviceutil.ServiceFramework):
    _svc_name_ = "PythonService"
    _svc_display_name_ = "Python Service"
    _svc_description_ = "This is a Python service."

    def __init__(self, *args):
        super().__init__(*args)
        self.event = win32event.CreateEvent(None, 0, 0, None)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.event)

    def SvcDoRun(self):
        while True:
            # 执行你的代码
            win32event.WaitForSingleObject(self.event, 5000)

if __name__ == '__main__':
    # 将Python程序注册为系统服务
    win32serviceutil.HandleCommandLine(PythonService)

在以上代码中,我们从win32serviceutil.ServiceFramework类继承了一个自定义类PythonService,并实现了其中的SvcDoRun()SvcStop()方法。这些方法分别在服务启动和停止时自动被调用。

你需要将_svc_name__svc_display_name__svc_description_属性设置为你的服务名称和描述。在SvcDoRun()方法中,你可以编写你的代码,以响应系统事件。

将Python程序设置为开机自启动

在Windows上,我们可以通过修改注册表中的一个条目实现程序的开机自启动。


import _winreg as reg
import os

def add_to_startup():
    # 注册表路径
    reg_path = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
    # 要添加的项名称
    key_name = "PythonService"
    # 要启动的程序的路径
    key_value = os.path.abspath(__file__)
    # 打开注册表
    reg_key = reg.OpenKey(reg.HKEY_CURRENT_USER, reg_path, 0, reg.KEY_SET_VALUE)
    # 添加条目
    reg.SetValueEx(reg_key, key_name, 0, reg.REG_SZ, key_value)
    # 关闭注册表
    reg.CloseKey(reg_key)

if __name__ == "__main__":
    # 将Python程序添加到开机启动项
    add_to_startup()

在以上代码中,我们使用_winreg模块打开当前用户的注册表,并添加一个名为PythonService的条目,该条目指向我们需要自启动的Python文件。

总结

在本文中,我们学会了如何将Python程序注册为Windows服务和设置开机自启动。通过编写一个自定义类继承自win32serviceutil.ServiceFramework,我们可以轻松注册Python程序为Windows服务。而对于开机自启动,我们通过_winreg模块实现。现在,我们可以在Windows系统上编写Python程序,并使其自动响应系统事件并在系统启动时运行。