如何使用Bash命令提取Python脚本中定义的变量res的取值
解决方案
Python进程内部的自定义变量不会自动同步到父级Bash shell的环境变量中,你原写法里的echo $res只能读取Bash本身的环境变量,自然无法获取Python脚本内的res值。
方案1:修改Python脚本(最推荐,适配Airflow场景)
- 在
run_sql.py的末尾添加一行代码:print(res),确保脚本执行完会把res的值输出到标准输出流 - 调整Bash命令直接捕获标准输出即可,写法如下:
res=$(python3 /services/run_sql.py -dev /sql_path/audit.sql) # 此时bash变量$res的值就是4
如果是在Airflow的BashOperator中使用,只需开启do_xcom_push=True参数,该命令的标准输出会自动推送到XCom中,下游任务可直接通过XCom读取到4这个值,示例Operator写法:
bash_task = BashOperator( task_id="get_res_value", bash_command="python3 /services/run_sql.py -dev /sql_path/audit.sql", do_xcom_push=True, dag=dag )
方案2:无需修改原Python脚本
如果无权修改run_sql.py,可以直接通过Python一行命令加载脚本并打印变量值,命令如下:
res=$(python3 -c "exec(open('/services/run_sql.py').read());print(res)")
内容的提问来源于stack exchange,提问作者Sudarshan
相关产品推荐
相关产品推荐

