You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何区分Python脚本是Windows启动执行还是后续手动/脚本调用执行

区分Windows启动时与手动执行Python脚本的方法

你之前用if 'STARTUP' in os.environ:判断无效,核心原因是Windows默认不会给启动程序自动设置STARTUP环境变量,这个判断条件根本触发不了。下面是几个可行的替代方案:

方案1:通过父进程判断

Windows登录后启动的程序,父进程通常是explorer.exe(桌面进程);如果是后台服务启动的,父进程可能是services.exe。可以用psutil库获取父进程信息来区分:

  1. 先安装依赖库:
pip install psutil
  1. 示例代码:
import os
import psutil

def is_startup_triggered():
    parent_pid = os.getppid()
    try:
        parent_process = psutil.Process(parent_pid)
        # 检查父进程是否为系统启动相关进程
        return parent_process.name().lower() in ['explorer.exe', 'services.exe']
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        return False

if __name__ == '__main__':
    if is_startup_triggered():
        print("执行Windows启动时的专属操作")
        # 这里编写启动时的业务逻辑
    else:
        print("执行手动/其他调用时的操作")
        # 这里编写手动执行的业务逻辑

方案2:给启动项添加自定义环境变量

给Windows启动项里的脚本绑定一个专属环境变量,脚本通过检测这个变量精准判断执行时机:

  1. 创建脚本的快捷方式,右键点击快捷方式→属性→目标,修改为:
cmd /c "set MY_SCRIPT_FROM_STARTUP=1 && python D:\实际路径\你的脚本.py"

(把路径替换成你的脚本真实路径)

  1. 脚本内的判断代码:
import os

if __name__ == '__main__':
    if os.environ.get('MY_SCRIPT_FROM_STARTUP') == '1':
        print("执行Windows启动时的专属操作")
        # 启动时逻辑
    else:
        print("执行手动/其他调用时的操作")
        # 手动执行逻辑

这个方法完全不会有误判,是最可靠的方案。

方案3:通过时间差判断(适合精度要求不高的场景)

获取系统启动时间,对比脚本启动时间的间隔,如果间隔很短(比如10分钟内),则判定为启动时执行:

import os
import time
import psutil

def is_startup_triggered():
    boot_time = psutil.boot_time()
    script_start_time = os.path.getctime(__file__)
    # 阈值设为10分钟(600秒),可根据需求调整
    return (time.time() - boot_time) < 600 and (script_start_time - boot_time) < 600

if __name__ == '__main__':
    if is_startup_triggered():
        print("执行Windows启动时的专属操作")
    else:
        print("执行手动/其他调用时的操作")

注意:如果用户在开机后阈值时间内手动执行脚本,会误判为启动触发,仅适合对精度要求低的场景。

内容的提问来源于stack exchange,提问作者user23378386

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:07:14