我不能通过 BashOperator xcom_push 参数

Spa*_*Bot 1 airflow apache-airflow-xcom

我是 Airflow 的 xcom 功能的新手。我用 PythonOperator 进行了尝试,它工作正常(即,我可以将值从上下文中推入和拉出),但是当我在 BashOperator 上尝试时,它不起作用。但是,我只能通过在任务创建期间添加 xcom_push=True 属性来提取最终的 stdout 语句。这是一回事。2)但我也希望像我们在 PythonOp 中那样根据它们的键(到 BashOp 和从 BashOp)推送和拉取值。这真的很有帮助,因为我需要将大量变量从一个脚本传递到其他。

Rya*_*uan 11

这是你想要的吗?

from datetime import datetime
from airflow.models import DAG
from airflow.operators.bash_operator import BashOperator

dag = DAG(
    dag_id="example_bash_operator_1",
    schedule_interval=None,
    start_date=datetime(2018, 12, 31),
)

t1 = BashOperator(
    task_id="t1",
    bash_command='echo "{{ ti.xcom_push(key="k1", value="v1") }}" "{{ti.xcom_push(key="k2", value="v2") }}"',
    dag=dag,
)

t2 = BashOperator(
    task_id="t2",
    bash_command='echo "{{ ti.xcom_pull(key="k1") }}" "{{ ti.xcom_pull(key="k2") }}"',
    dag=dag,
)

t1 >> t2
Run Code Online (Sandbox Code Playgroud)

  • 它在执行 bash 脚本时不起作用是有道理的,因为“bash_command”在执行之前被 Jinja 引擎去模板化了。此外,“xcom_pull”和“xcom_push”仅在 Airflow 上下文中可用,而不在 bash 脚本中可用。希望有帮助 (2认同)