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

如何判断Python脚本运行在Glue Job环境还是Jupyter Notebook中

Glue ETL运行环境自动识别解决方案

以下几种方案均可实现环境自动判断,脚本导出后无需手动修改即可直接部署到Glue Job运行。

方案1:异常捕获法(最稳妥,兼容性最高)

核心逻辑:Glue Job运行时会自动传入--JOB_NAME等预设参数,调用getResolvedOptions不会报错;而Notebook开发环境没有这些参数,调用会抛出异常,直接捕获异常跳过对应逻辑即可。
完整代码示例:

import sys
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

SC = SparkContext.getOrCreate()
GC = GlueContext(SC)
job = None

# 自动识别环境执行初始化
try:
    args = getResolvedOptions(sys.argv, ['JOB_NAME'])
    job = Job(GC)
    job.init(args['JOB_NAME'], args)
    print("当前运行在Glue Job环境,初始化完成")
except Exception:
    print("当前运行在开发环境,跳过Glue Job初始化逻辑")

优点:

  • 适配所有版本的Glue运行环境,不需要维护额外判断规则
  • 代码导出后可直接部署,无需任何修改
  • 兼容性最高,不会因为自定义参数或环境变量修改出现误判

方案2:参数特征判断

核心逻辑:Glue Job运行时sys.argv会自动携带--JOB_NAME参数,直接判断参数是否存在即可。
代码示例:

is_glue_job = '--JOB_NAME' in sys.argv
if is_glue_job:
    args = getResolvedOptions(sys.argv, ['JOB_NAME'])
    job = Job(GC)
    job.init(args['JOB_NAME'], args)

优点:逻辑直观,没有异常捕获的额外开销
注意事项:如果在Notebook中手动给sys.argv添加了--JOB_NAME参数会导致判断失效,适合没有自定义修改sys.argv的场景。

方案3:环境变量判断

核心逻辑:Glue Job运行时会自动注入多个专属环境变量,比如AWS_GLUE_JOB_RUN_ID、AWS_GLUE_JOB_NAME,直接判断环境变量是否存在即可。
代码示例:

import os
is_glue_job = os.getenv('AWS_GLUE_JOB_RUN_ID') is not None
if is_glue_job:
    args = getResolvedOptions(sys.argv, ['JOB_NAME'])
    job = Job(GC)
    job.init(args['JOB_NAME'], args)

优点:不受sys.argv修改影响,判断逻辑更独立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 00:15:07