如何在 python 脚本中区分启动时自动运行与用户手动运行?通过命令行参数(如 --startup)显式标识执行上下文,是 windows 下可靠区分脚本“开机自启”与“用户手动触发”的最佳实践,避免依赖不可靠的环境变量或进程树判断。
在 Windows 系统中,Python 脚本无法通过 os.environ(例如检查 'STARTUP' in os.

✅ 推荐方案:显式传参 + 命令行标志
使用标准库 argparse 定义一个布尔型参数(如 --startup),由启动入口(而非脚本自身)决定是否传递该标志:
import argparse
import sys
def main():
parser = argparse.ArgumentParser(description="区分启动时机的 Python 脚本")
parser.add_argument('--startup', action='store_true',
help='标记脚本由系统启动流程触发(如开机自启)')
args = parser.parse_args()
if args.startup:
print("✅ 正在开机自启环境中运行 —— 执行初始化/后台服务逻辑...")
# 例如:启动守护线程、加载配置、连接数据库、写入启动日志
# 注意:此处不应阻塞(避免拖慢系统启动),慎用 input()
else:
print("? 正在用户交互环境中运行 —— 启动 GUI 或 CLI 交互流程...")
# 例如:显示 Tkinter 窗口、读取用户输入、调用 subprocess 执行其他任务
if __name__ == '__main__':
main()? 部署要点:
C:\Path\To\python.exe "C:\Your\Script.py" --startup
⚠️ 补充建议:
综上,以参数驱动行为是轻量、可测试、跨部署方式(快捷方式/任务计划/服务)一致的健壮方案。