【问题标题】:How to start a python file while Windows starts?Windows启动时如何启动python文件?
【发布时间】:2011-05-25 04:38:30
【问题描述】:

我有一个 python 文件,我正在运行该文件。

如果 Windows 关闭并再次启动,我如何在每次 Windows 启动时运行该文件?

【问题讨论】:

    标签: python windows


    【解决方案1】:

    根据脚本的作用,您可以:

    1. 将其打包成一个服务,然后应该安装它
    2. 将其添加到 Windows 注册表 (HKCU\Software\Microsoft\Windows\CurrentVersion\Run)
    3. 将快捷方式添加到开始菜单的启动文件夹 - 它的位置可能会随操作系统版本而变化,但安装程序总是有一些说明将快捷方式放入该文件夹
    4. 使用windows的任务调度器,然后你可以在登录和启动等多种事件上设置任务。

    实际的解决方案取决于您的需求以及脚本实际执行的操作。
    关于差异的一些说明:

    • 解决方案#1 在计算机上启动脚本,而解决方案#2 和#3 在安装它的用户登录时启动它。
    • 还值得注意的是#1 总是启动脚本,而#2 和#3 将仅在特定用户上启动脚本(我认为如果您使用默认用户,那么它将在每个人上启动,但是我不确定细节)。
    • 解决方案#2 对用户来说更“隐藏”,而解决方案#3 在禁用自动启动方面留给用户更多的控制权。
    • 最后,解决方案 #1 需要管理权限,而其他两个可以由任何用户完成。
    • 解决方案#4 是我最近发现的,非常简单。我注意到的唯一问题是 python 脚本会导致出现一个小命令窗口。

    如您所见,这一切都归结为您想做什么;例如,如果它仅用于您的目的,我会简单地将它拖到启动文件夹中。

    无论如何,最近我倾向于解决方案#4,作为最快和最直接的方法。

    【讨论】:

    • 仅供参考:如果您使用 pythonw.exe 而不是 python.exe 来启动脚本,它不应该显示命令窗口。
    • 您好,谢谢您的帮助!目前在 pycharm 上,我在手动打开每个脚本后使用“python -m binance_trade_bot”启动一个脚本,并使用“python -m btb_manager_telegram -t XXXXX -c YYYYY”启动另一个脚本。我怎么能应用它? :-)
    【解决方案2】:

    if 可以简单地将以下代码添加到您的脚本中。不过,这只适用于 Windows!:

    import getpass
    USER_NAME = getpass.getuser()
    
    
    def add_to_startup(file_path=""):
        if file_path == "":
            file_path = os.path.dirname(os.path.realpath(__file__))
        bat_path = r'C:\Users\%s\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup' % USER_NAME
        with open(bat_path + '\\' + "open.bat", "w+") as bat_file:
            bat_file.write(r'start "" %s' % file_path)
    

    此函数将在启动文件夹中创建一个 bat 文件来运行您的脚本。

    file_path 是您希望在计算机打开时运行的文件的路径。您可以将其留空,以便将运行脚本添加到启动中。

    【讨论】:

    • 为什么start后面有""。我认为它必须在 %s 周围才能处理空格,但是当我尝试这样做时,它不起作用(只是打开了一个命令提示符)
    • 有一个错误,在函数add_to_startup的第2行
    • os.path.dirname 返回文件夹的路径而不是包含文件的路径,但这很容易解决
    • @frakman1 开始后的空引号在那里,因为命令“start”的第一个参数是窗口的标题 - 在这种情况下,由于引号是空的,所以没有标题.因此,如果您删除引号,结果将是 start file_path。这将产生一个标题为 file_path 的 cmd 窗口
    • 只在登录时运行,Windows 启动时不运行
    【解决方案3】:

    在以下启动目录中(Windows XP 上至少存在此路径):

    C:\Documents and Settings\All Users\Start Menu\Programs\Startup
    

    为你的 python 程序添加一个快捷方式。它应该在每次系统启动时执行。

    【讨论】:

    • 我想从命令行执行此操作,但窗口 7 不允许写入。
    • @sam:我不知道 Windows 7 中的启动文件夹路径是什么。我举的例子是所有用户的启动文件夹。每个用户都应该有一个,您可以将快捷方式放在那里。快捷方式可以是一个简单的bat 文件,内容为python path_to_your_python_program.py
    • 只在登录时运行,Windows 启动时不运行
    【解决方案4】:

    尚未对此进行测试,但我会创建一个包含“python yourfile.py”的批处理文件并将其放入自动启动文件夹中。

    在 Windows 7 上,您可以在此处找到它:

    %APPDATA%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    

    【讨论】:

    • 运行(WinKey + R) -> shell:common startup
    • 只在登录时运行,Windows 启动时不运行
    【解决方案5】:
    • 点击Win+R

    • 输入 shell:startup

    • 拖放你的python文件my_script.py

      • 如果您不需要控制台: 将扩展名从 my_script.py 更改为 my_script.pyw
      • 其他: 使用内容创建run_my_script.cmdpython path\to\your\my_script.py

    【讨论】:

      【解决方案6】:

      你可以把run_script.cmd放进去

      C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
      

      run_script.cmd 的内容

      python path\to\your\script.py
      

      【讨论】:

      • 这不是只在登录时运行的吗?
      • 只在登录时运行,Windows 启动时不运行
      【解决方案7】:

      尝试将条目添加到 "HKLM/SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 。 右键->新建->字符串值->添加文件路径

      【讨论】:

      【解决方案8】:
      1. 创建一个exe文件,我使用pyinstaller "yourCode.py"

      2. 将执行文件添加到您的注册表项: https://cmatskas.com/configure-a-runonce-task-on-windows/

      【讨论】:

        【解决方案9】:
        import winreg
        
        def set_autostart_registry(app_name, key_data=None, autostart: bool = True) -> bool:
            """
            Create/update/delete Windows autostart registry key
        
            ! Windows ONLY
            ! If the function fails, OSError is raised.
        
            :param app_name:    A string containing the name of the application name
            :param key_data:    A string that specifies the application path.
            :param autostart:   True - create/update autostart key / False - delete autostart key
            :return:            True - Success / False - Error, app name dont exist
            """
        
            with winreg.OpenKey(
                    key=winreg.HKEY_CURRENT_USER,
                    sub_key=r'Software\Microsoft\Windows\CurrentVersion\Run',
                    reserved=0,
                    access=winreg.KEY_ALL_ACCESS,
            ) as key:
                try:
                    if autostart:
                        winreg.SetValueEx(key, app_name, 0, winreg.REG_SZ, key_data)
                    else:
                        winreg.DeleteValue(key, app_name)
                except OSError:
                    return False
            return True
        
        
        def check_autostart_registry(value_name):
            """
            Check Windows autostart registry status
        
            ! Windows ONLY
            ! If the function fails, OSError is raised.
        
            :param value_name:  A string containing the name of the application name
            :return: True - Exist / False - Not exist
            """
        
            with winreg.OpenKey(
                    key=winreg.HKEY_CURRENT_USER,
                    sub_key=r'Software\Microsoft\Windows\CurrentVersion\Run',
                    reserved=0,
                    access=winreg.KEY_ALL_ACCESS,
            ) as key:
                idx = 0
                while idx < 1_000:     # Max 1.000 values
                    try:
                        key_name, _, _ = winreg.EnumValue(key, idx)
                        if key_name == value_name:
                            return True
                        idx += 1
                    except OSError:
                        break
            return False
        
        

        创建自动启动:

        set_autostart_registry('App name', r'C:\test\x.exe')

        更新自动启动:

        set_autostart_registry('App name', r'C:\test\y.exe')

        删除自动启动:

        set_autostart_registry('App name', autostart=False)

        检查自动启动:

        if check_autostart_registry('App name'):

        【讨论】:

          【解决方案10】:

          上面提到的所有方法都不起作用我都试过了,我会告诉你更简单的解决方案和windows任务调度器的替代方案

          创建一个包含内容的 .bat 文件 "您的项目解释器的地址" "您的带有脚本名称的 Python 脚本的地址"

          将此bat文件存入window启动文件夹(默认隐藏) 仅供参考:查找窗口启动文件夹 然后按 windos+r 输入 shell:startup -- 它会直接带你到启动文件夹

          将 bat 文件复制到那里,并以相同的格式复制以下 2 个地址, 然后只需重新启动系统或关闭并启动。

          代码将在打开后 20 秒内自动运行。

          稍后谢谢我

          【讨论】:

          • 只在登录时运行,Windows 启动时不运行
          • 您必须将 bat 文件放在启动文件夹中,Windows 会自动启动应用程序或对启动文件夹中的任何内容进行编码。
          • 不行,如果机器有登录密码就不行
          • 看,我每天都在使用这种方法,我创建了一个助手,它会在我的 Windows 启动时自动打开,并且我的机器有登录密码,可能是 bat 文件的问题(地址项目解释器或代码)。
          猜你喜欢
          • 1970-01-01
          • 2022-08-15
          • 2015-01-31
          • 2011-07-12
          • 2011-06-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-13
          • 1970-01-01
          相关资源
          最近更新 更多